gpt4 book ai didi

c++ - 如何使用包含 std::thread 的 std::vector 的结构类型正确初始化 std::vector

转载 作者:行者123 更新时间:2023-11-30 03:43:25 27 4
gpt4 key购买 nike

这是我的代码的一个小例子,如何在构造函数中正确初始化成员 pool_。

#include <vector>
#include <thread>
#include <iostream>

namespace b {

class A;
typedef void (A::*Func) (void);

struct c {
Func fun;
int num;
std::vector<std::thread> threads;
};

class A {
public:
A() {
pool_ = {{&A::func1, 1, }, {&A::func2, 2, }}; // how to initialize?
}
private:
std::vector<c> pool_;
void func1(void) { std::cout << "func1\n"; };
void func2(void) { std::cout << "func2\n"; };
void CreateThread(c& pool) {
for (int i = 0; i < pool.num; ++i) {
pool.threads.push_back(std::thread(pool.fun, this));
}
}
};

} // namespace b

int main() {
b::A a;
return 0;
}

平台:带有 g++ 4.8.4 的 Ubuntu 14.04

编译命令:

g++ -Wall -std=c++11 test.cc -lpthread -o test

主要错误信息是:

error: use of deleted function ‘std::thread::thread(std::thread&)’

我知道是因为std::thread的复制构造和赋值是不允许的。但是我尝试了其他方法并失败了。

最佳答案

优雅解决这个问题的两个步骤:

  1. 为 c 提供一个做“正确的事”的构造函数

struct c {
c(Func fun, int num, std::vector<std::thread> threads = {})
: fun(fun)
, num(num)
, threads(std::move(threads))
{}

Func fun;
int num;
std::vector<std::thread> threads;
};
  1. 然后将您的对象整齐地放置到 pool_

    A()
    {
    pool_.emplace_back(&A::func1, 1);
    pool_.emplace_back(&A::func2, 2);
    }

关于c++ - 如何使用包含 std::thread 的 std::vector 的结构类型正确初始化 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36109553/

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