gpt4 book ai didi

c++ - 为什么 "non-standard syntax; use ' &' to create a pointer to member"在 CTOR 中使用线程?

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

代码如下:

#include <iostream>
#include <thread>

struct PickRandomFile {
PickRandomFile() {
std::thread t1(taskScanPaths);
}

inline void taskScanPaths() {
// my task
}
};

int main() {
PickRandomFile pickRandomFile;

return 0;
}

msvcPickRandomFile::taskScanPaths':非标准语法;使用“&”创建指向成员 ThreadTrigger 的指针

怎么了?我通常在 gcc 中执行此操作。

最佳答案

自由函数“退化为指针”(类似于数组)所以

std::thread t1(taskScanPaths);

如果 taskScanPaths 是一个免费函数就好了,它会和

有同样的效果
std::thread t1(&taskScanPaths);

但是,对于类成员函数,您需要地址来获取指向成员函数的指针(并且您需要指定类),如

std::thread t1(&PickRandomFile::taskScanPaths,this);

另请注意,您需要将对象/指针传递给实例,以便线程可以实际调用该方法。

来自cppreference的一些相关引述:

Pointer to member functions

A pointer to non-static member function f which is a member of class C can be initialized with the expression &C::f exactly. Expressions such as &(C::f) or &f inside C's member function do not form pointers to member functions.

它没有明确提到 f,但是因为 &f 没有形成指向成员函数的指针,所以可以安全地假设 f也不形成指向成员函数的指针。

另一方面:

Pointers to functions

A pointer to function can be initialized with an address of a non-member function or a static member function. Because of the function-to-pointer implicit conversion, the address-of operator is optional:

关于c++ - 为什么 "non-standard syntax; use ' &' to create a pointer to member"在 CTOR 中使用线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58505257/

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