2010-11-05 32 views
5

Làm cách nào để có thể truy cập các loại tham số của hàm lambda trong C++? Các công việc sau không hoạt động:Làm cách nào để truy cập các loại lambda bằng C++ 0x?

template <class T> struct capture_lambda { 
}; 

template <class R, class T> struct capture_lambda<R(T)> { 
    static void exec() { 
    } 
}; 

template <class T> void test(T t) { 
    capture_lambda<T>::exec(); 
} 

int main() { 
    test([](int i)->int{ return 0; }); 
} 

Ở trên không biên dịch, vì trình biên dịch chọn nguyên mẫu mẫu thay vì chuyên môn hóa.

Có cách nào để thực hiện điều này không?

Điều tôi thực sự cố gắng đạt được là: Tôi có danh sách các hàm và tôi muốn chọn hàm thích hợp để gọi. Ví dụ:

template <class T, class ...F> void exec(T t, F... f...) { 
    //select the appropriate function from 'F' to invoke, based on match with T. 
} 

Ví dụ, tôi muốn gọi hàm mà sẽ đưa 'int':

exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); }); 
+1

Tôi sẽ hỏi một góc nhìn rộng hơn một chút: Bạn đang cố giải quyết vấn đề nào bằng cách sử dụng hàm 'exec'? Nghe có vẻ hơi xấu xí. – GManNickG

+0

Tôi đang cố gắng tạo một loại hình công đoàn đại số. – axilmar

+0

Độ phân giải quá tải trên các loại đối tượng chức năng tùy ý ... Tôi không thể nghĩ ra cách để thực hiện điều đó. Nếu họ sẽ xuất các loại param của họ, nó có thể được thực hiện. Nếu không, tôi không có đầu mối. –

Trả lời

2

này là không thể, hàm lambda là đường cú pháp để tạo chức năng các đối tượng không chức năng thực tế. Điều này có nghĩa là mẫu đang chấp nhận một lớp và các lớp không có khái niệm về loại đối số .

Cũng xin lưu ý rằng đối tượng chức năng chung có thể có bất kỳ số lượng quá tải nào operator() s.

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