提示模板功能中的祖先类型

时间:2017-07-10 22:52:17

标签: c++ oop inheritance

假设我有一个祖先类Component和多个派生类ComponentAComponentB等。

现在,我为组件A, B, C, ...编写了一个几乎相同的函数。所以我有一堆几乎相同的函数(类型提示/声明除外)。

接下来,我使用模板重新实现函数template <class T> ...

此新功能适用于所有组件..但它不会向用户传达它实际上只与Components兼容。

如何指定稍微通用的函数,以便它接受Component在继承方面是祖先的所有对象?

1 个答案:

答案 0 :(得分:2)

  

如何指定稍微通用的函数,以便它接受Component在继承方面是祖先的所有对象?

您可以使用static_assertstd::is_base_of

示例:

#include <type_traits>

class Component {};

class ComponentA : Component {};

class ComponentB : Component {};

template <typename T>
void foo()
{
   static_assert(std::is_base_of<Component, T>::value, "Need a sub-type of Component");
}

int main() 
{
   foo<ComponentA>(); // OK
   foo<ComponentB>(); // OK
   foo<int>();        // Not OK
}