我有一个模板类,它至少 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;
};
我的问题:
- 如何只添加“otherPayload”变量而不重新编码整个
AClass<int>
? - 如何调用
showPayload()
因为当我收到错误消息时 如上所述在main()
中执行。 - 有没有办法只能专门“修改/补充”一些 一个类的成员没有完全重新实现它?
最佳答案
一种可能的方法是使用旧的继承:
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/