Hãy nhìn vào C++ 0x lambda mã liên quan sau đây:C++ 0x lambda, làm thế nào tôi có thể chuyển như một tham số?
typedef uint64_t (*WEIGHT_FUNC)(void* param);
typedef std::map<std::string, WEIGHT_FUNC> CallbackTable;
CallbackTable table;
table["rand_weight"] = [](void* param) -> uint64_t
{
return (rand() % 100 + 1);
};
Tôi đã nhận ra lỗi (trong Visual Studio 2010) rằng lambda không thể được chuyển đổi sang các loại WEIGHT_FUNC
. Tôi cũng biết câu trả lời: sử dụng std::function object
:
typedef std::function<uint64_t (void*)> WEIGHT_FUNC;
Tuy nhiên, tôi cũng muốn biết làm thế nào tôi có thể nhận được các loại lambda KHÔNG sử dụng std::function
. Loại đó nên là gì?
'tự động'? _______ – kennytm
tự động sẽ chỉ hữu ích để tự động xác định loại, nó không phải là một loại biến thể, nó không thể là một tham số. – Klaim
Bạn đang sử dụng trình biên dịch nào? Dường như trình biên dịch của bạn là không chuẩn trong trường hợp lambda's, họ sẽ có thể chuyển đổi hoàn toàn thành con trỏ hàm (trong trường hợp như thế này.) – GManNickG