gpt4 book ai didi

c++ - std::thread 中的参数。如何运作?

转载 作者:行者123 更新时间:2023-11-30 05:46:55 26 4
gpt4 key购买 nike

使用 std::thread 构造函数的例子:

#include <thread>
using namespace std;

void a_function(){}
void a_function2(int a){}
void a_function3(int a,int b){}
void a_function4(int &a){}

class a_class
{
public:
void a_function5(int a){}
};

int main()
{
a_class aux;
int a = 2;

thread t(a_function);
thread t2(a_function2,2);
thread t3(a_function3,2,3);
thread t4(a_function4,ref(a));
thread t5(&a_class::a_function5,&aux,2);

t.join();
t2.join();
t3.join();
t4.join();
t5.join();
}

构造函数如何知道参数的数量?构造函数如何调用一种未知类型的函数?我怎么能实现这样的东西?例如,std::thread

的一个包装器
class wrapper_thread
{
thread t;

public:

wrapper_thread() //what arguments here?
: t() //What arguments here?
{}
}

最佳答案

您正在寻找的是 parameter pack运算符(operator)。使用它可以编写一个接受可变数量参数的函数。它可以用这些参数做一些事情,比如将它们转发给另一个函数。

请记住,由于模板是在编译时实例化的,因此在调用站点必须知道参数的数量及其类型。

实现包装线程类构造函数的简单方法可能是:

template <typename ... Args> // this ctor has variadic template arguments
wrapper_thread(Args& ... args) // pack references to arguments into 'args'
: t(args...) //unpack arguments, pass them as parameters to the ctor of std::thread

一旦你明白了这一点,你可以看看 std::forward()做完美转发。 Andrei Alexandrescu 就可变参数模板发表了精彩的演讲。您可以在这里找到它:http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Variadic-Templates-are-Funadic

关于c++ - std::thread 中的参数。如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com