我知道您可以根据模板参数重载模板:
template <class T> void test() {
std::cout << "template<T>" << std::endl;
}
void test() {
std::cout << "not a template" << std::endl;
}
然后在一些函数中:
test<int>();
test();
将正确解决您想要的两个不同版本的 test() 中的哪一个。但是,如果我现在在具有继承的类中执行此操作:
class A {
public:
void test() {
std::cout << "A::Test: not a template" << std::endl;
}
};
class B : public A {
public:
template <class T>
void test() {
std::cout << "B::Test: template<T>" << std::endl;
}
};
然后在一个函数内部:
B b;
b.test<int>();
b.test();
b.test<int>();
有效但b.test();
不:
error: no matching function for call to ‘B::test()’
note: candidate is:
note: template<class T> void B::test()
为什么这个/有什么方法可以根据模板参数正确解析 2 个版本?