相关疑难解决方法(0)

一个积极的lambda:'+ [] {}' - 这是什么巫术?

在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:

int main() {
    auto test = []{};
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:

如果你+在第一个lambda之前放置一个,它会神奇地开始工作.

所以我很好奇:为什么以下工作呢?

int main() {
    auto test = +[]{}; // Note the unary operator + before the lambda
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

它与GCC 4.7+和Clang 3.2+都很好.代码标准是否符合要求?

c++ lambda operator-overloading language-lawyer c++11

255
推荐指数
1
解决办法
3万
查看次数

C++ 11 - 将成员函数传递给线程给出:没有重载函数需要 2 个参数

从我查找的内容来看,我的语法是正确的,但我的编译器(VS2015)却在抱怨。请注意,我将名称空间 ee 与类 Network 一起使用。这是代码

    //code that doens't work
    thread clientThread(&ee::Network::clientRun, new ee::Network);
Run Code Online (Sandbox Code Playgroud)

*注意:在实际代码中,我没有将 new 作为参数调用,我在这里这样做是为了缩短代码。

我已经测试了这些功能并且它们可以工作,但我无法使用线程使它们工作。这是他们的签名。

    void serverRun();
    void clientRun();
    void clientRun(string ip);
Run Code Online (Sandbox Code Playgroud)

我的错误是:

  1. 错误 C2661“std::thread::thread”:没有重载函数需要 2 个参数

  2. abc 没有构造函数“std::thread::thread”的实例与参数列表匹配

有没有人对这种情况下可能发生的事情有任何见解?

c++ multithreading function member

4
推荐指数
1
解决办法
2050
查看次数