c++ - 如何为模板类的特殊版本添加成员变量?

标签 c++ templates template-specialization specialization member-variables

我有一个模板类,它至少 95% 的代码对于所有类型的模板参数都是相同的,除非应该为一个特化添加一个成员变量和一个函数。

我想要得到的样本如下:

template <typename T>
class AClass {
private:
   T  payLoad;

public:
   AClass( const T& crp_payload ) : payLoad( crp_payload ) {};

   void showMe() {
      cout << "Common showMe:" << payLoad << endl;
   };

   /*
    * A lot of functions same for all specializations go here.
    * I absolutely don't want to implement respectively them for
    * every specializations!
    */

// specializing for int ----------------------------
   // dedicated function
   template <int>
   void showPayload() {
      cout << "AClass<int>::showPayload:" << payLoad << endl;
   };
   // dedicated variable, but following code can not be compiled!
   template <int>
   int   otherPayload;
};

int main() {
   AClass<int> iac( 123 );
   iac.showMe();
   iac.showPayload();//can not pass the compiling!

   AClass<float> fac(456);
   fac.showMe();
   return 0;
};

我的问题:

  1. 如何只添加“otherPayload”变量而不重新编码整个 AClass<int> ?
  2. 如何调用 showPayload() 因为当我收到错误消息时 如上所述在 main() 中执行。
  3. 有没有办法只能专门“修改/补充”一些 一个类的成员没有完全重新实现它?

最佳答案

一种可能的方法是使用旧的继承:

template<class T> struct Extra {};

template<> struct Extra<int> {
    int extraPayload;
    void showPayload();
};

template<class T> class Class: public Extra<T> {
    void showMe();
};

template<> void Class<int>::showMe() { showPayload(); }

所有特定于特化的部分都提取到一个单独的类中,并且根据需要对常用方法进行特化。

关于c++ - 如何为模板类的特殊版本添加成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585741/

相关文章:

c++ - Clang 未定义行为检查器链接错误

javascript - 使用 mustache 动态渲染部分模板

xcode - Xcode 4.4模板位置

c++ - 如何减少功能模板的特化程度?

c++ - 模板成员变量特化

c# - 自学C#/C/C++应该做什么样的项目?

c++ - 是否有在 Windows 上分发 C/C++ 开发包(无源)的首选规范方法?

c++ - 如何从(嵌套的)std::initializer_list 确定大小?

c++ - 嵌套类是类模板中的依赖类型?

c++ - 特化 std::optional