c++检查模板参数是否派生自某个基类

标签 c++ templates inheritance

如何检查我的模板参数是否派生自某个基类?这样我就可以确定函数 Do 可以被调用:

template<typename Ty1> class MyClass
{
  ...
  void MyFunction();
}; 

template<typename Ty1> void MyClass<Ty1>::MyFunction()
{
  Ty1 var;
  var.Do();
}

最佳答案

不要。如果作为 Ty1 的参数提供的类中不存在方法 Do(),它将根本无法编译。

模板是 duck typing 的一种形式: 一个类的能力不是由它继承的接口(interface)决定的,而是由它实际公开的功能决定的。

优点是您的模板可以被具有合适的Do() 方法的任何 类使用,无论它来自哪里或它有什么基础。

关于c++检查模板参数是否派生自某个基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881399/

相关文章:

c++ - 如何将父类转换为子类

C++ : how to link against libA. so 而不是 libA-X.Y.Z.so

c++ - 使用 Rcpp 糖就地修改 SEXP

c++ - 按大小存储字段的结构

c++ - protected 成员与重载运算符冲突

c++ - 是什么导致我的 "‘FatalError’ in namespace ‘Foam’ does not name a type”错误?

c++ - 变量模板的编译器问题

c++ - GCC 7 没有选择正确的类型特征特化

c++ - 在派生类对象中使用派生类构造函数与基类类型兼容

C#:从其基类的实例返回继承类(泛型列表)