Chr*_*ris 2 c++ templates types std
我在C++中有一个模板函数,它基本上将值写入XML文件,出于验证目的,我希望写出变量类型及其值.我目前正在使用typeid(T).name()这伟大工程int,double等等,但我想对于一个特例char阵列和std::string,使其始终写出"串"或东西比更有意义:
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
Run Code Online (Sandbox Code Playgroud)
要么
char const [2]
Run Code Online (Sandbox Code Playgroud)
关于如何以优雅的方式做到这一点的任何想法?
我的代码(减少)看起来像这样(不是函数只是模板)
template <typename T> bool SetValue(const std::string §ionName, const std::string &valueName, const T &value)
{
myXMl->AddAttribute(TYPE_DEF,typeid(T).name());
return true;
}
Run Code Online (Sandbox Code Playgroud)
Bjö*_*lex 10
您可以使用traits类:
template<class T>
class type_name {
public:
static std::string get() { return typeid(T).name(); }
};
Run Code Online (Sandbox Code Playgroud)
此模板实现默认情况.现在,您可以将其专门用于应具有特殊名称的类型:
template<>
class type_name<std::string> {
public:
static std::string get() { return "string"; }
};
template<>
class type_name<const char *> {
public:
static std::string get() { return "string"; }
};
template<int N>
class type_name<const char[N]> {
public:
static std::string get() { return "string"; }
};
Run Code Online (Sandbox Code Playgroud)
您的代码将如下所示:
template <typename T> bool SetValue(const std::string §ionName,
const std::string &valueName, const T &value)
{
myXMl->AddAttribute(TYPE_DEF, type_name<T>::get());
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |