Tôi có một đâu đó struct:Làm cách nào để lấy kiểu trả về của phương thức quá tải trong C++?
struct A {
ComplicatedType1 f();
ComplicatedType2 f(int);
};
Tôi muốn có được sự trở lại kiểu của f()
sử dụng thời gian biên dịch những người giúp đỡ. Tôi đang thử std::result_of<>
:
using Type = std::result_of<decltype(&A::f)()>::type;
Nhưng trình biên dịch cho tôi một lỗi hợp lý: "tham chiếu đến chức năng quá tải không thể giải quyết được".
Vì vậy, tôi chuyển đến SO và xem this câu trả lời được chấp nhận và được bỏ phiếu, đề xuất thực hiện static_cast<ComplicatedType1 (A::*)()>(&A::f)
- nhưng tôi không có số ComplicatedType1
tại thời điểm này. Tôi bị mắc kẹt trong một đệ quy.
Làm thế nào để có được ComplicatedType1
bên trong biểu using
tôi với tối thiểu là mã?
Đây có phải là công việc cho decltype không? –
Bạn không thể sử dụng loại khấu trừ với từ khóa 'tự động'? –
'std :: result_of' hy vọng là đối số mẫu của nó là * type *, nhưng' & A :: f' không phải là một loại; không phải là '(& A :: f)()'. Hơn nữa, 'result_of' là một công cụ pre-C++ 11 đặc biệt, và được thay thế bởi' decltype' cho hầu hết các ứng dụng: 'decltype (f())' – dyp