式テンプレートを使用しており、式引数の型を決定したいと考えています。式には、多くのテンプレート パラメーターを含む複雑な名前がありますが、それらの型は、引数の型から簡単に推測できます。式の生成に使用された操作に基づいて式の型を判断するのに役立つトリックはありますか?
template<typename X1, typename X2>
void foo(decltype(x1() + x2())) {}
注: Eigen の自動微分を追加しようとしています。
はい、大文字にします。
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;
}