可以使用 decltype 来确定参数的类型

Can decltype be used to determine type of the arguments?

本文关键字:参数 类型 decltype 可以使      更新时间:2023-10-16

我正在使用表达式模板,想要确定表达式参数的类型。表达式具有带有大量模板参数的混乱名称,但它们的类型可以简单地从参数类型推断出来。是否有一些技巧可以帮助我根据用于生成表达式的操作确定表达式的类型?

template<typename X1, typename X2>
void foo(decltype(x1() + x2())) {}

注意:我正在尝试为特征添加自动微分。

是的,只需将它们设置为大写:

template<typename X1, typename X2>
void foo(decltype(X1() + X2()) x) {}

 

此外,您还可以使用std::common_type

template<typename X1, typename X2>
void foo(typename std::common_type<X1,X2>::type x) {}

 

怎么有点奇怪,你应该像下面这样称呼foo

foo<int, float>(12.5);

 

推断返回类型更有用:

template<typename X1, typename X2>
auto foo(X1 x1, X2 x2) -> typename std::common_type<X1,X2>::type
{
    return x1 + x2;
}