我正在使用表达式模板,并希望确定表达式参数的类型。表达式具有大量模板参数的错误名称,但它们的类型可以简单地从参数类型推断出来。 是否有一些技巧可以帮助我根据用于生成表达式的操作来确定表达式的类型?
template<typename X1, typename X2>
void foo(decltype(x1() + x2())) {}
注意:我正在尝试为Eigen添加自动区分。
答案 0 :(得分: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;
}