小编Z3R*_*3R0的帖子

将 void 指针指向的 std::thread 转换为对象 std::thread 而不是指向对象的指针

我正在寻找我所做的练习,特别是一个“线程管理器”类,它通过将线程存储在“typedef void *HANDLE;”数组中来管理线程(真的吗?哈哈)在结构 GROUP 内声明。

所以我已经让它工作了,但我看到我正在通过“reinterpret_cast”转换为“std::thread*”来转换“HANDLE”,所以“void*”。

看到后我担心:如何以及如何将其直接转换为 std::thread 对象?

我做了这个代码,例如:

#include <iostream>
#include <thread>

typedef void *HANDLE;

class thread_obj {
    public:
        void operator()(int x){
            for(int i = 0x0; i < x; i++){
                std::cout << "i = " << i << std::endl;
            }
        }
};

int main(){

    std::thread thr(thread_obj(), 0x3);
    HANDLE test = &thr;

    std::thread *p_thr = reinterpret_cast<std::thread*>(test);

    p_thr->join();

    return 0x0;
}
Run Code Online (Sandbox Code Playgroud)

这是原始代码。

如果我这样做:

std::thread p_thr = reinterpret_cast<std::thread&>(test);
Run Code Online (Sandbox Code Playgroud)

或者:

std::thread p_thr = *reinterpret_cast<std::thread*>(test);
Run Code Online (Sandbox Code Playgroud)

或者:

std::thread *temp = reinterpret_cast<std::thread*>(test);
std::thread p_thr = …
Run Code Online (Sandbox Code Playgroud)

c++ void-pointers stdthread

0
推荐指数
1
解决办法
65
查看次数

标签 统计

c++ ×1

stdthread ×1

void-pointers ×1