如果我在C ++ 11中有这个例子:
#include <iostream>
template <typename T1, typename T2>
auto add(T1 t1, T2 t2) -> decltype(t1 + t2)
{
decltype(t1 + t2) val = t1 + t2;
return val;
}
int main()
{
double a = 12.5;
int b = 4;
std::cout << add(a, b) << std::endl; // prints 16.5
}
我可以返回一个可以由编译器自动确定的类型。
由于我是C ++的新手并且目前需要在C ++ 98中实现类似的东西,有谁知道我会怎么做?
答案 0 :(得分:6)
通常,在C ++ 98 / C ++ 03中,为了简单起见,我们手动完成了这项工作:
#include <iostream>
template <typename R, typename T1, typename T2>
R add(T1 t1, T2 t2)
{
R val = t1 + t2;
return val;
}
int main()
{
double a = 12.5;
int b = 4;
std::cout << add<double>(a, b) << std::endl;
// ^^^^^^^^
}
这很糟糕,这正是为什么decltype
和 trailing-return-types 被添加到语言中的原因。