传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中
Posted
技术标签:
【中文标题】传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中【英文标题】:Pass pointer to member function compiles in MinGW-w64 but not in gcc 【发布时间】:2015-10-28 09:35:44 【问题描述】:我有一个带有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 中禁止这样做,我应该怎么写?
编辑:我可以使用 lambda 或在 Worker::run
之前添加 &
来解决此问题,但各种 gcc 版本是否接受它的问题仍然存在。这是 MinGW 还是 gcc 4.9.1 的错误?
【问题讨论】:
【参考方案1】:你需要使用
std::thread(&Worker::run, worker);
live example
【讨论】:
这行得通,谢谢。知道为什么 gcc 4.9.1 接受它而不用和号吗?这与标准中的任何变化有关吗? @galinette 它不应该工作,它也不能在 GCC 4.9.1 here 上工作。 MinGW-w64 错误呢?这很奇怪,因为它是一个不应该影响解析器的 gcc 端口。谜底…… @galinette 当然,这是可能的以上是关于传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中的主要内容,如果未能解决你的问题,请参考以下文章