我想为每个用于模板化类的不同类型返回一个不同的常量。
例如,当班级为
时栈< int>我想要常数 EMPTY = -99
当班级为Stack< char>我希望常量EMPTY为'\ 0'。
到目前为止,我一直在寻找如何明确地专门化变量的语法,并且不知道从哪里开始寻找它。
一个简单的代码示例会很棒,因为这个问题一直困扰着我。
我到目前为止(没有常数)是:
template<class T>
class Stack {
private:
T* items_;
//EMPTY constant here
public:
Stack();
~Stack();
void push(T value);
T pop();
};
答案 0 :(得分:3)
template<class T>
class Stack {
private:
T* items_;
static T EMPTY;
public:
Stack();
~Stack();
void push(T value);
T pop();
};
extern template<> int Stack<int>::EMPTY;
extern template<> char Stack<char>::EMPTY;
然后在cpp文件中:
template<> int Stack<int>::EMPTY = -99;
template<> char Stack<char>::EMPTY = '\0';
注意根据用途,这将限制您可以使用实例化模板的类型。
答案 1 :(得分:2)
您可能想要考虑是否希望将其作为堆栈的一部分,或者将其分解为常规traits类。根据您的操作,它可能对其他数据结构很有用。
template<typename T>
struct traits
{
static T empty;
};
template<> int traits<int>::empty = 99;
template<> char traits<char>::empty = 0;
template<class T>
class Stack
{
public:
Stack()
{
T t = traits<T>::empty;
}
};
int main()
{
Stack<int>();
Stack<char>();
}