c++ - 在模板函数中提示祖先类型

标签 c++ oop inheritance

假设我有一个祖先类,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_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
}

关于c++ - 在模板函数中提示祖先类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022847/

相关文章:

c++ - 多次读取后 I/O 流变慢

c++ - 子聚合的指定初始值设定项是否需要花括号?

javascript - 自定义 jQuery 请求对象——我应该将我的实现移到我的标记中吗?

javascript - 模块化系统中 JavaScript 原型(prototype)的继承

.net - 丢失的 VB6 源代码;是否可以覆盖另一个对象中的方法?

c++ - 创建模板化对象时替代工厂模式 - C++

c++ - 反向数字输入

c++ - 创建嵌套类的实例时,是否也创建了嵌套类的实例?

java - Java中的结构类对象

使用泛型的 C# 接口(interface)静态方法调用