我对C ++ 11,Visual Studio 2013(可能不是Visual Studio问题)和lambda函数成员的非静态数据成员初始化程序有一个理解问题。
class Test {
private:
int _number;
int _numberGetter() {
return this->_number; // OK
}
public:
std::function<int(void)> NumberTest1 = [&]()->int {
return this->_number; // error: 'this' cannot be used inside the body of this lambda
};
//std::function<int(void)> NumberTest2 = Test::_numberGetter;
std::function<int(void)> NumberTest3;
std::function<int(void)> NumberTest4;
std::function<int(void)> NumberTest5;
std::function<int(void)> NumberTest6;
Test() : NumberTest3(&Test::_numberGetter) { } // OK
Test() : NumberTest4([&]()->int {
return this->_number; // OK
}) { }
Test() {
NumberTest5 = &Test::_numberGetter; // OK
}
Test() {
NumberTest6 = [&]()->int {
return this->_number; // OK
};
}
};
为什么我不能用lambda函数直接初始化std :: function NumberTest1,其中对象实例是。
也许这是因为lambda函数将被直接编译,除了正常的成员函数_numberGetter,并且此时实例对象不可用。但这只是一种推定。反对这种假设是,NumberTest1不是常量,只能从类实例中获得
也许这是可能的,我的代码中只有一点点错误。
EIDT 1:
Visual Studio版本:
Microsoft Visual Studio Ultimate 2013
版本12.0.31101.00更新4
.Net Version 4.5.51641