假设我有一个祖先类,Component
和多个派生类,ComponentA
, ComponentB
等
现在,我为组件编写了一个几乎相同的函数 A, B, C, ...
.所以我有一堆几乎相同的功能(类型提示/声明除外)。
接下来,我使用模板重新实现函数,template <class T> ...
.
这个新功能适用于所有组件。但它不会向用户传达它实际上只与 Components
兼容的信息。 .
我如何指定一个稍微通用的函数,以便它接受 Component
的所有对象就继承而言是祖先吗?
最佳答案
How do I specify a slightly generic function, such that it accepts all objects for which
Component
is an ancestor in terms of inheritance?
您可以使用 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
}
关于c++ - 在模板函数中提示祖先类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022847/