让一个线程拥有它运行 C++ 的仿函数

Have a thread own the functor it runs C++

如果您想 运行 在 c++ 中的新线程中使用仿函数,您必须创建仿函数对象,然后将对它的引用传递给线程构造函数。这行得通,但给你留下了一个线程和仿函数对象作为单独的东西。是否有可能有一个拥有仿函数本身的线程,当在线程上调用 join 时,仿函数本身将被清理?一个可能的 API 可能是类似于 thread<FunctorType>(args, for, functor) 的东西,它将在线程 class 中创建仿函数对象,然后 运行 它。

当然可以。 constructor

template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );

接受函数对象作为转发引用。这意味着如果您为其提供右值,它将移动函数。

例如

#include <thread>
#include <iostream>

struct F
{
    auto operator()() { std::cout << "Hello World" << std::endl; }
};

auto test()
{
    std::thread t1{[]{ std::cout << "Hello World" << std::endl; }};

    std::thread t2{F{}};

    t1.join();
    t2.join();
}