テンプレートに渡された関数の戻り値の型を取得するにはどうすればよいですか?
私はtemplate<typename T>
とtemplate<typename Result, typename Args...>
間の変換する方法がわからない:テンプレートで関数の戻り値の型を取得する
template<typename T>
void print_name(T f)
{
static_assert(internal::is_function_pointer<T>::value
|| std::is_member_function_pointer<T>::value,
"T must be function or member function pointer.");
typename decltype(f(...)) Result; // ???
typename std::result_of<T>()::type Result; // ???
printf("%s\n", typeid(Result).name());
}
void f_void() {}
int f_int(int x) { return 0; }
float f_float(int x, int y) { return 0.f; }
struct X { int f(int x, float y) { return 0; } };
int main()
{
print_name(f_void);
print_name(f_int);
print_name(f_float);
print_name(&X::f);
return 0;
}
私は機能print_name
内タイプResult
を取得できますか?
あなたが到達しようとしているのは、その型を事前に知らなくても変数に結果を得ることであれば、単純な 'auto a = f(x); ' で十分です。 –
@ JanNilsFerner私は彼がコールに使用されるパラメータを持っていないと思う。 – skypjack