2010-07-08 47 views
6

Làm cách nào để xác định loại trả về của hàm chung thành viên?Mẫu C++ xác định kiểu trả về hàm

template<class E> 
    struct result<E> { 
     // E has member function data(), I need to know its return type 
     typedef typename &E::data type; 
    }; 

có thể thực hiện theo cách chung chung không? Tôi biết có boost:: result_of nhưng vì mục đích của tôi thiếu chuyên môn (nếu tôi hiểu đúng, loại trả về phải là chuyên môn). tăng cường triển khai sẽ tuyệt vời.

+2

Có lẽ, bạn không cần phép thuật đó chút nào. Hãy thử sử dụng 'E :: value_type *' hoặc 'E :: pointer'. Nếu nó có 'data()', nó có thể là một container và cung cấp các typedef công cộng. –

+0

@Johannes cảm ơn bạn. thực sự đã cố gắng viết trình bao bọc để làm việc một cách minh bạch với ublas và những thứ khác. Thật không may giao diện dữ liệu ublas() là một chút không chuẩn (array_type) vì vậy tôi đã kết thúc chuyên nó một cách riêng biệt. – Anycorn

Trả lời

4

Nhà điều hành phi tiêu chuẩn của GCC typeof có thể thực hiện việc này, như có thể Boost.TypeOf.

+0

dường như hoạt động, miễn là không có chức năng quá tải. Bạn có biết cách đối phó với trường hợp có 2 hàm (một hàm có bộ định dạng const) – Anycorn

+0

Bạn sẽ cần phải định kiểu hàm cho loại const hoặc không const trước khi sử dụng nó. Bạn nhận được cùng một vấn đề với boost :: bind. – bradgonesurfing

+0

@brad cảm ơn bạn. Tôi không cần biết loại trả về trước khi nhập loại? bạn có thể đưa ra một ví dụ không? – Anycorn

3

Nếu bạn đang sử dụng VS2010 hoặc GCC 4.3, ít nhất bạn có thể sử dụng từ khóa mới C++ 0x decltype.

Các vấn đề liên quan