Tôi muốn viết một mẫu có thể lấy làm tham số kiểu trả về của hàm mà nó đang được khởi tạo.Có cách nào để lấy kiểu trả về của "hàm hiện tại"
Ví dụ, giả sử tôi đã một lớp templated Result
:
template<type T>
class Result {
T _result_value;
T& operator=(T that);
~Result();
}
Sẽ có nhiều chuyên ngành cho lớp này. Trong destructor tôi muốn đăng nhập kiểu trả về, và trong bài tập operator=
tôi muốn kiểm tra và xác nhận các giá trị lỗi.
Lý tưởng nhất, tôi muốn để có thể có một định nghĩa:
#define RESULT Result< /* decltype magic for type of current function */ >
vì vậy tôi có thể sử dụng nó:
HFILE MyOpenFile(...) {
RESULT result;
}
... mà sẽ được rút ra để Result<HFILE>
. Đây là một ví dụ đơn giản: viết RESULT
thay vì Result<HFILE>
không phải là một vấn đề lớn, nhưng có những trường hợp khác mà kiểu trả về của hàm hiện tại không dễ dàng thu được.
bạn có thể sử dụng http://en.wikipedia.org/wiki/Decltype? – bobah
Tôi đoán bạn sẽ ít nhất phải chuyển tên hàm thành macro (ví dụ: 'RESULT (MyOpenFile)') và trong trường hợp quá tải, bạn vẫn gặp phải sự mơ hồ. Ngay cả [nhận được một con trỏ đến chức năng hiện tại] (http://stackoverflow.com/q/2154852/1468366) là khó khăn, và nhận được một con trỏ chính xác gõ có vẻ không thể mà không đặt tên lại chức năng. – MvG
@MvG, bạn có thể nhận được sự mơ hồ quá tải bằng cách chuyển đến 'decltype' hàm + thông số, ví dụ: 'decltype (foo (b))', 'decltype (foo (a, b))' sẽ giải quyết chính xác. Tuy nhiên, đó là một nỗi đau .. – Nim