小编dan*_*gur的帖子

传递包含互斥体的成员函数时出现模板错误

我花了一个小时来研究一个大类,我需要将 的成员函数传递给一个最小的示例。给出的编译器错误是:

错误 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)

c++ templates

6
推荐指数
1
解决办法
158
查看次数

标签 统计

c++ ×1

templates ×1