Tôi đang cố gắng sử dụng C++ 11 Lambda để khởi tạo biến thành viên const
của một lớp.Bạn có thể sử dụng Lambda trong danh sách khởi tạo của lớp không?
Một ví dụ đơn giản hơn nhiều:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
Trong MSVC10 sản lượng này:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
Trong IDEONE sản lượng này:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
tôi bắt đầu để có được những ý tưởng mà tôi không thể sử dụng lambdas trong danh sách khởi tạo của lớp.
Tôi có thể? Nếu vậy, cú pháp thích hợp là gì?
+1: Có, tôi đang cố gắng điền vào 'n_' bằng cách trả về giá trị từ lambda. –
@John Xem cập nhật. Và tôi thực sự thấy cách đó có thể hữu ích với lambda phức tạp hơn (đa tuyên bố). –
Chính xác. Trong trường hợp sử dụng thực tế của tôi, tôi lưu trữ kích thước của một tệp chỉ đọc bằng byte. –