c – 根据模板变量类型执行不同的方法
发布时间:2020-12-16 03:33:55 所属栏目:百科 来源:网络整理
导读:有没有办法确定传递给模板的变量的类型,并根据它是int还是std :: string等来调用函数? 例如 template class Tstruct Jam{ Jam(T *var) { if (typeid(var) == typeid(std::string*) *var = "Hello!"; else if (typeid(var) == typeid(int*) *var = 25; }};
有没有办法确定传递给模板的变量的类型,并根据它是int还是std :: string等来调用函数?
例如 template <class T> struct Jam { Jam(T *var) { if (typeid(var) == typeid(std::string*) *var = "Hello!"; else if (typeid(var) == typeid(int*) *var = 25; } }; 当我尝试使用该代码,我收到从const char *到int的错误无效转换.我怀疑这是因为编译器将模板扩展为单独的函数,当我指定一个新的结构实例时,会发出Jam< std :: string>(& setme);它检测到var * = 25语句并拒绝编译. 有没有正确的方法来做到这一点?也许与宏观卫士?谢谢. 解决方法
使用常规功能重载:
template <class T> struct Jam { Jam(std::string* var) { *var = "Hello!"; } Jam(int* var) { *var = 25; } }; 除非你想专门用于实例化Jam的T型.在这种情况下你会做: template<> struct Jam<std::string> { Jam(std::string* var) { *var = "Hello!"; } }; template<> struct Jam<int> { Jam(int* var) { *var = 25; } }; template<typename T> struct Jam { Jam(T* var) { // every other type } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |