#include <iostream>
using namespace std;
class c1 {
public:
void f1() { std::cout << "In f1\n"; }
};
class c2 {
public:
void f2() { std::cout << "In f2\n"; }
};
template<typename T>
class C: public c1, c2 {
public:
void f() {
};
};
int main() {
C<c2> c;
c.f();
return 0;
}
有没有什么方法可以基于T
将C
中的f
函数映射到f1
中的函数c1
和c2
中的f2
?我不清楚当我使用 指向特定类时,
f
函数如何用作 f1
和 f2
的包装器>T
注意:我无法修改类 c1
和 c2
。它超出了我的范围。
最佳答案
您可以使用 constexpr if来自 C++17。例如
void f() {
if constexpr (std::is_same_v<T, c1>)
f1();
else
f2();
}
请注意,constexpr if 是在编译时求值的,正如@skypjack 评论的那样,对于这种情况,在运行时求值也很好。所以下面的代码也能正常工作:
void f() {
if (std::is_same_v<T, c1>)
f1();
else
f2();
}
关于c++ - 根据模板参数引用不同基类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854027/