gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:45:49 28 4
gpt4 key购买 nike

有没有办法确定传递给模板的变量类型,并根据它是否为 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;
}
};

当我尝试使用该代码时,出现错误 invalid conversion from const char* to int .我怀疑这是因为编译器将模板“扩展”为单独的函数,并且当我指定结构的新实例时 throw 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++ - 根据模板变量类型执行不同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11021267/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com