如何在 C++11 之前模拟尾随返回类型的 decltype

How can I simulate decltype in a trailing-return-type before C++11?

本文关键字:返回类型 decltype 模拟 C++11      更新时间:2023-10-16

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

通常,在 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尾随返回类型的原因。