decltype
chắc chắn là con đường để đi ở đây, nhưng nếu bạn phải sử dụng result_of
, nó có thể được thực hiện bằng cách sử dụng các function objects quy định tại <functional>
Ví dụ, để có được những loại quả của double * double
, sử dụng
std::result_of<std::multiplies<double>(double, double)>::type
Tương tự như vậy, phủ định unary sẽ
std::result_of<std::negate<int>(int)>::type
Với C + 14, thậm chí bạn có thể truy vấn các loại kết quả của một phép toán trên hai loại khác nhau
std::result_of<std::plus<>(double, int)>::type
Dĩ nhiên, kỹ thuật này tương tự có thể được sử dụng cho người sử dụng các loại định nghĩa là cũng
struct foo{};
struct bar{};
bar operator/(foo, foo) { return bar{}; }
std::result_of<std::divides<>(foo, foo)>::type
Live demo
Thay vào đó, bạn có thể sử dụng 'decltype'. – Jarod42
@ b4hand 'typename' chỉ cần thiết nếu các đối số được truyền cho mẫu phụ thuộc vào tham số mẫu. 'int' và' double' không phụ thuộc. – Casey