2

我的问题如下

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::stringmin = ""max = "". 目前,它崩溃为 0 例如不能转换为字符串。怎么做 ?(如果我只能专门化构造函数和主设置器,那就太好了)。

4

4 回答 4

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 "";
}
于 2012-07-22T18:20:26.427 回答
1

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

于 2012-07-22T17:57:31.447 回答
1

制作自己的numeric_limits重定向到标准的并且专门用于字符串。

于 2012-07-22T18:07:20.503 回答
0
set(T & const p_Arg = Initializer<T>())

whereInitializer专门用于所有支持的类型。

于 2012-07-22T18:23:08.057 回答