小编kfc*_*ckf的帖子

模板类中的模板成员函数特化

我有一个模板类和一个成员函数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

15
推荐指数
2
解决办法
1279
查看次数