decltype
jest zdecydowanie do zrobienia tutaj, ale jeśli trzeba użyć result_of
, można to zrobić za pomocą function objects zdefiniowany w <functional>
Na przykład, aby uzyskać wynikowy typ double * double
użyć
std::result_of<std::multiplies<double>(double, double)>::type
Podobnie jednoargumentowy negacja być
std::result_of<std::negate<int>(int)>::type
z C + +14, można nawet zapytać wynikowy typ operacji matematycznych na dwóch różnych typach
std::result_of<std::plus<>(double, int)>::type
Oczywiście, ta sama technika może być stosowana dla typów zdefiniowanych przez użytkownika, jak również
struct foo{};
struct bar{};
bar operator/(foo, foo) { return bar{}; }
std::result_of<std::divides<>(foo, foo)>::type
Live demo
Zamiast tego możesz użyć 'decltype'. – Jarod42
@ b4hand "nazwa_pliku" jest niezbędny tylko wtedy, gdy argumenty przekazane do szablonu zależą od parametrów szablonu. 'int' i' double' nie są zależne. – Casey