如何在C ++ 11之前模拟trailing-return-type中的decltype?

时间:2014-12-10 15:17:53

标签: c++ c++11 c++98

如果我在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中实现类似的东西,有谁知道我会怎么做?

1 个答案:

答案 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;
    //              ^^^^^^^^
}

live demo

这很糟糕,这正是为什么decltype trailing-return-types 被添加到语言中的原因。