传递指向成员函数的指针在 MinGW-w64 中编译但在 gcc 中不编译
Pass pointer to member function compiles in MinGW-w64 but not in gcc
我有一个带有 run()
非静态成员函数的 Worker
对象。
已创建对象:
Worker * worker = new Worker();
正在做:
std::thread(Worker::run, worker);
在 MinGW-w64 (gcc 4.9.1) 下编译(一个作品)但在 Ubuntu linux (gcc 5.2.1) 下,我得到编译错误:
Invalid use of non-static member function
代码用-std=gnu++11
编译
我知道在 MinGW 的情况下,指向成员函数的指针有一个带有某种 Worker * this
参数的签名,允许像静态函数指针一样使用它。为什么 linux 5.2.1 gcc 禁止这样做,我应该怎么写?
EDIT :我可以使用 lambda 或在 Worker::run
之前添加 &
来解决这个问题,但问题是为什么它被各种接受或不接受gcc 版本仍然存在。这是 MinGW 或 gcc 4.9.1 错误吗?
您需要使用
std::thread(&Worker::run, worker);
我有一个带有 run()
非静态成员函数的 Worker
对象。
已创建对象:
Worker * worker = new Worker();
正在做:
std::thread(Worker::run, worker);
在 MinGW-w64 (gcc 4.9.1) 下编译(一个作品)但在 Ubuntu linux (gcc 5.2.1) 下,我得到编译错误:
Invalid use of non-static member function
代码用-std=gnu++11
我知道在 MinGW 的情况下,指向成员函数的指针有一个带有某种 Worker * this
参数的签名,允许像静态函数指针一样使用它。为什么 linux 5.2.1 gcc 禁止这样做,我应该怎么写?
EDIT :我可以使用 lambda 或在 Worker::run
之前添加 &
来解决这个问题,但问题是为什么它被各种接受或不接受gcc 版本仍然存在。这是 MinGW 或 gcc 4.9.1 错误吗?
您需要使用
std::thread(&Worker::run, worker);