c – 根据模板变量类型执行不同的方法

c – 根据模板变量类型执行不同的方法,第1张

概述有没有办法确定传递给模板变量的类型,并根据它是int还是std :: string等来调用函数? 例如 template <class T>struct Jam{ Jam(T *var) { if (typeid(var) == typeid(std::string*) *var = "Hello!"; 有没有办法确定传递给模板的变量的类型,并根据它是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    }};
总结

以上是内存溢出为你收集整理的c – 根据模板变量类型执行不同的方法全部内容,希望文章能够帮你解决c – 根据模板变量类型执行不同的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存