我花了一个小时来研究一个大类,我需要将 的成员函数传递给一个最小的示例。给出的编译器错误是:
错误 C2664: 'B::B(const B &)': 无法将参数 1 从 '_Ty' 转换为 'const B &'
下面是一个最小的示例,当使用指向互斥体的指针时,代码可以正常编译。有人可以帮助我理解这里出了什么问题以及为什么以及如何从“元组”中的错误消息中得到提示吗?
感谢大家!
#include <functional>
#include <iostream>
#include <string>
#include <mutex>
class A {
public:
std::string Init(std::function<std::string(void)> f) {
return f();
}
};
class B {
std::mutex lock;
std::string member = "Hello World!";
public:
std::string foo() {
return member;
}
};
int main() {
auto callback3 = std::bind(&B::foo, B());
auto instance = A();
std::cout << instance.Init(callback3) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
Astd::mutex
是不可复制的,它的复制构造函数被删除。复制互斥体没有定义的语义,这意味着什么?如果互斥体锁定了某些内容,是否意味着两个互斥体以某种方式成功锁定了同一个对象(原始对象和副本),并且两者都必须解锁。因此 astd::mutex
不可复制。
这B
也使得不可复制。
std::bind
需要使用可复制的可调用对象,这会导致此编译错误。
归档时间: |
|
查看次数: |
158 次 |
最近记录: |