让一个线程拥有它运行 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();
}
如果您想 运行 在 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();
}