C ++:模板类特化和类型特征

时间:2012-07-22 17:47:43

标签: c++ class templates specialization

我的问题如下

template<class T> MyClass
{
    MyClass(/* Lots of parameters with no problem */, const T& min = 0, const T& max = std::numeric_limits<T>::max());
    set(/* Lots of parameters with no problem */, const T& min = 0, const T& max = std::numeric_limits<T>::max());
    /* Lots of function with no problem */
}

我希望我的模板类与std::string兼容,而无需重新实现所有功能。对于std :: string,我想要min = ""max = ""。目前,它崩溃为0,例如无法转换为字符串。怎么做 ? (如果我只能专门构造构造函数和主要的setter那就太棒了。)

4 个答案:

答案 0 :(得分:3)

我想创建包装器? :

template<typename T> struct ttraits
{
static T max(){
return std::numeric_limits<T>::max();
}
static T min(){
return std::numeric_limits<T>::min();
}
};

template<> struct ttraits<std::string>
{
static std::string max(){
return ""; //or whatever max is for you
}
static std::string min(){
return "";
}

答案 1 :(得分:1)

您可以随时选择正确的重载来处理enable_if的特殊情况,或者您可以更好地考虑如何使代码更加健壮。使用0初始化模板参数不是一个好主意,而T()则是。

答案 2 :(得分:1)

制作您自己的numeric_limits重定向到标准版本,专门用于字符串。

答案 3 :(得分:0)

set(T & const p_Arg = Initializer<T>())

其中Initializer专门用于所有受支持的类型。