具有'this'对象的lambda函数成员的C ++非静态数据成员初始值设定项

时间:2014-12-28 00:01:34

标签: c++ visual-studio c++11 visual-studio-2013 lambda

我对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

0 个答案:

没有答案