【发布时间】:2018-09-16 15:59:05
【问题描述】:
我想写一个函数
template <class Arg>
tuple<int, double> calc(Arg arg);
返回:
[arg,0] if arg is int,
[0,arg] if arg is double
and [0,0] if arg is nor int or double.
我实现了这个函数比较arg的类型(Arg)、i的类型(int)和d的类型(double) 然后分别等于 i=arg 或 d=arg。 但是,如果我想将我的函数与无法转换为 int/double 的字符串或其他类型一起使用,则会出现转换错误(例如,很明显,因为我不能将 char* 等同于 int)。 我怎样才能绕过这个转换 const char* 到 int(或另一个不可转换的类型到 int)?或者也许这个函数还有另一个实现?
#define GETTYPE(x) typeid(x).name()
template <class Arg>
tuple<int,double> calc(Arg arg)
{
int i = 0;
double d = 0;
if (GETTYPE(arg) == GETTYPE(i))
{
i = arg;
}
else if (GETTYPE(arg) == GETTYPE(d))
{
d = arg;
}
return make_tuple(i, d);
}
【问题讨论】:
-
不要使用
typeid::name。这种情况下使用std::is_same会好很多 -
请发布确切的错误消息并显示您如何调用模板。快速浏览一下,
template <class Arg>通常指定为template <typename Arg>,因为double和float不是类。 -
谢谢,我已经修好了
-
@KenY-N 在这种情况下,
class和typename在当前标准中被视为相同,因此您的建议不适用。class很乐意被推导出为原始类型。
标签: c++