我有一个模板类和一个成员函数print()来打印数据。
template<typename T>
class A
{
public:
T data;
void print(void)
{
std::cout << data << std::endl;
}
// other functions ...
};
Run Code Online (Sandbox Code Playgroud)
然后,我想打印标量数据或矢量数据,所以我给出了一个专门的定义并得到一个编译器错误。
template<typename T>
void A<std::vector<T>>::print(void) // template argument list error
{
for (const auto& d : data)
{
std::cout << d << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:为什么这个成员函数特化会报错?为向量定义打印函数的正确方法是什么?
解决方案 1:我已经测试了以下定义。
template<typename T>
class A<std::vector<T>>
{
public:
std::vector<T> data;
void print(void) { // OK
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
这个有效,但我必须将其他成员函数复制到这个专门的类中。
编辑:
解决方案2 …
c++ templates member-functions template-specialization c++17