【发布时间】:2019-12-27 18:15:19
【问题描述】:
我正在尝试编写一个非常简单的专用类模板,它有一个成员变量,并且可以在特殊情况下以不同的方式打印该成员变量。我知道这个例子没什么用,但它很好地说明了这个问题。
当特化类模板时,似乎类的特化不共享相同的成员变量,所以下面的代码不会编译...
#include <iostream>
#include <string>
// Class template
template <typename T>
struct S
{
S(const T& t)
: t(t)
{}
void print()
{
std::cout << t << std::endl;
}
private:
T t;
};
// Specialization
template <>
struct S<std::string>
{
void print()
{
// ERROR: "t" is not defined in this context
std::cout << "string: " << t << std::endl;
}
};
这表明我需要为每个专业化编写一个单独的构造函数,并为每个专业化有一个单独的成员变量t,如果我有很多专业化,这感觉很快就会变成大量重复的代码和工作。
如果我说的是真的,那么在专门的类模板中完全使用成员变量是不好的做法吗?是否有任何替代方案可以减少代码重复?
【问题讨论】:
标签: c++ templates template-specialization member-variables