c++ - 当我指定 T 必须基于 C++ 中的某个类时,如何调用泛型变量的方法?
问题描述
class Base {
public:
void A() {}
};
class Derived: public Base {
public:
void B() {}
};
template <typename T, std::enable_if<std::is_base_of<Base, T>::value, int>::type = 0>
class SomeClass {
public:
T t;
// I want to call method A() with variable 't'.
void invoke() { t.A(); }
};
auto some = new someClass<Derived>();
// I want to call method B() when the 'T' specify to 'Derived'.
some->t.B();
当'T'必须基于类'Base'时如何调用A()方法,当'someClass'类中的'T'指定为'Derived'时如何调用B()方法?
解决方案
您可以专门化模板。
template<typename>
class SomeClass;
template<>
class SomeClass<Base>
{
public:
Base t;
void invoke() { t.A(); }
}
template<>
class SomeClass<Derived>
{
public:
Derived t;
void invoke() { t.B(); }
}
推荐阅读
- html - Jquery不在父循环内循环
- java - OutputStream 未完全写入 mp3
- c++ - 整数数组 [n] 与新整数 [n]
- nlp - NLP:从 QuestionAnsweringPipeline 中获得 5 个最佳候选人
- javascript - 使用 Intl.DateTimeFormat 的日期格式为 MM/DD/YYYY
- r - R将矩阵转换为表格
- ms-access - Microsoft Access 中的日期条件
- angular - 如何将多个 Observable 的发射值合并为一个 Observable 发射?
- python-3.x - 模态按钮在破折号python中不起作用
- android - postValue() 不会在 MutableLiveData 上调用观察