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

前端之家收集整理的这篇文章主要介绍了c – 根据模板变量类型执行不同的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法确定传递给模板的变量的类型,并根据它是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
    }
};
原文链接:https://www.f2er.com/c/111019.html

猜你在找的C&C++相关文章