需要将空字符串作为模板参数

时间:2011-06-21 05:22:55

标签: c++ templates oop

我想要一个存储一对不同类型变量的类,但我需要将变量的零或空默认值作为模板参数传递。我可以为int或double做到这一点,但我怎么做字符串呢?我知道c ++目前没有字符串参数,但是替代设计是什么。我需要这样的东西:

#include <iostream>
#include <string>

using namespace std;

template <typename atype, typename btype, atype anull, btype bnull>
class simpleClass {
public:
    atype       var1;
    btype       var2;

    simpleClass<atype, btype, anull, bnull>   *parent;          // pointer to parent node

    simpleClass(); ~simpleClass();
};
template <typename atype, typename btype, atype anull, btype bnull>
simpleClass<atype, btype, anull, bnull>::simpleClass()  {   var1 = anull; var2 = bnull; 
                        parent  = NULL;  }
template <typename atype, typename btype, atype anull, btype bnull>
simpleClass<atype, btype, anull, bnull>::~simpleClass() {}


int main() {
    simpleClass<string, int, "", 0> obj;
    obj.var1 = "hello";
    obj.var2 = 45;
    cout << obj.var2;
    return 0;
}

编译这个,我得到了

error: ‘struct std::string’ is not a valid type for a template constant parameter

1 个答案:

答案 0 :(得分:4)

除指针和引用外,不能将非整数类型作为模板参数传递。您可能希望的最佳行为是传递一个函数,该函数返回atypebtype的“默认”值。