线程无法使用模板运算符绑定仿函数()

时间:2015-10-11 10:54:42

标签: c++ multithreading c++11 functor

我遇到了std::thread的麻烦,我认为(从我得到的错误)是std::result_of不喜欢我的仿函数造成的。

我希望这可以编译:

#include <iostream>
#include <thread>

struct Foo
{
    template <class T>
    void operator() ( T& value ) // replacing T& by T fixes the issue
    {
        std::cout << "Foo output: " << value << std::endl;
    }
};

int main()
{
    auto t = std::thread( Foo(), 42 );
    t.join();
}

但我得到一个编译器错误(g ++和clang ++)说:

(...) no type named 'type' in 'std::result_of<Foo (int)>'

正如评论中所述,将T&替换为T似乎可以解决问题,任何人都可以帮助我了解发生了什么/我做错了什么?

修改

通过包装我的仿函数来帮助编译器似乎也可以工作:

auto t = std::thread( std::function< void(const int&) >(Foo()), 42 );

我只是不明白为什么这是必要的。

0 个答案:

没有答案