我的问题如下
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那就太棒了。)
答案 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
专门用于所有受支持的类型。