1

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

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

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

4

1 回答 1

2

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

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;
}
于 2013-11-10T09:21:43.420 回答