假设我有一个祖先类Component
和多个派生类ComponentA
,ComponentB
等。
现在,我为组件A, B, C, ...
编写了一个几乎相同的函数。所以我有一堆几乎相同的函数(类型提示/声明除外)。
接下来,我使用模板重新实现函数template <class T> ...
。
此新功能适用于所有组件..但它不会向用户传达它实际上只与Components
兼容。
如何指定稍微通用的函数,以便它接受Component
在继承方面是祖先的所有对象?
答案 0 :(得分:2)
如何指定稍微通用的函数,以便它接受
Component
在继承方面是祖先的所有对象?
您可以使用static_assert
和std::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
}