我有一个具有模板特化版本的类。但是,前者无法看到通用版本实现的方法。 如何使通用版本中的所有方法都可见 专业版?
例如:
test.hpp
#include <iostream>
template <typename T>
class A_base{
public:
virtual void foo() = 0;
};
template <typename T>
class A : public A_base<T> {
public:
void foo() override {
std::cout << "foo: generic type" << "\n";
}
};
template <>
class A<int> : public A_base<int>{
public:
void bar() {
std::cout << "bar: int type" << "\n";
}
};
TEST.CPP
#include "test.hpp"
int main(){
A<int> a;
a.foo(); // expected "foo: generic type"
a.bar(); // expected "bar: int type"
}
为什么A<int> a
无法看到foo()
?
答案 0 :(得分:2)
为什么
A<int>
无法看到foo()
?
通过为A<T>
专门化类模板T = int
,您可以定义A<T>
与T
对应时类模板int
的位置,以及该专业化(即:A<int>
)您提供的没有成员名为foo
(但主要模板会这样做)。
可以单独专门化类模板的成员函数。因此,您可以简单地为bar
专门化类模板T
的成员函数T = int
,而不是为整个类模板执行此操作:
template <>
void A<int>::bar(){
std::cout << "bar: int type" << "\n";
}