c-获取父母的类型

给定以下类别:

template <typename T>
class Child : public T {};

我还有一个模板函数:

template <typename T>
void foo(const T& bar)

在进行了一些模板体操之后,我有一段代码确定了bar是某种Child.但是我需要找到什么样的东西.

我希望能够对产生继承类型的bar进行调用.因此,查找父类型的虚假语法为:

decltype(foo.parent) bar;

有什么实际的语法可以做到这一点?

解决方法:

根据OP的要求,以下是我上面评论的扩展版本:

如果Child及其兄弟姐妹在您的控制之下,处理此问题的一种常见方法是向它们添加嵌套类型:

template<typename T> class Child : public T 
{
public:
   using parent = T;
};

template<typename T> void foo(const T& bar)
{
   typename T::parent goo;
}

如果T不直接可用(例如,在lambda中),那么这应该起作用:

auto foo2 = [](const auto& bar)
{
   typename std::remove_reference_t<decltype(bar)>::parent goo;
};

为了使它更好一点和更短一点,

template<typename T> using parent = typename T::parent;

template<typename T> void foo(const T& bar)
{
   parent<T> goo;
}

auto foo2 = [](const auto& bar)
{
   parent<std::remove_reference_t<decltype(bar)>> goo;
};

(尽管parent是一个相对通用的名称;当心冲突.parent_t,也许吗?)

对于不受您控制的类型,如果类型集是已知的,则parent< T>也可能是外部类型特征.

上一篇:Oracle12c中数据删除(delete)新特性之数据库内归档功能


下一篇:如何使用C#去灰度化一幅图像