我需要一个类型特征来将输入转换为字符串或双精度。现在我有这样的事情:
template<typename T> struct SH_trait{ };
template<> struct SH_trait<float>{ typedef double type; };
template<> struct SH_trait<double>{ typedef double type; };
template<> struct SH_trait<char*>{ typedef std::string type; };
template<> struct SH_trait<const char*>{ typedef std::string type; };
template<std::size_t N> struct SH_trait<const char[N]> { typedef std::string type; };
template<std::size_t N> struct SH_trait<char[N]> { typedef std::string type; };
template<> struct SH_trait<std::string>{ typedef std::string type; };
template<> struct SH_trait<TString>{ typedef std::string type; };
我用它作为
void f(T input) {
SH_trait<T>::type myvalue(input);
Class template_class(myvalue);
...
}
我这样做是因为 template_class 仅适用于double
and string
。
关键是:假设用户使用例如int
. 我想将其转换为双精度,所以我必须添加另一行。是否可以编写更通用的内容来涵盖所有情况?
没有c++11,没有boost,只有c++03