gpt4 book ai didi

c++ - 无法 std::bind 成员函数

转载 作者:太空狗 更新时间:2023-10-29 23:32:35 27 4
gpt4 key购买 nike

我写了下面的类:

class SomeClass {
private:
void test_function(int a, size_t & b, const int & c) {
b = a + reinterpret_cast<size_t>(&c);
}
public:
SomeClass() {
int a = 17;
size_t b = 0;
int c = 42;
auto test = std::bind(&SomeClass::test_function, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
test(a, b, c);
}
}

就其本身而言,这段代码在 IDE (Visual Studio 2015) 中看起来不错,但是当我尝试编译它时,出现以下错误:

Error   C2893   Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'    Basic Server    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits  1441    
Error C2672 'std::invoke': no matching overloaded function found Basic Server C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits 1441

我做错了什么?

编辑:我也写了这个版本:

class SomeClass {
private:
void test_function(int a, size_t & b, const int & c) {
b = a + reinterpret_cast<size_t>(&c);
}
public:
SomeClass() {
int a = 17;
size_t b = 0;
int c = 42;
auto test = std::bind(&SomeClass::test_function, a, std::placeholders::_1, std::placeholders::_2);
test(b, c);
}
}

我得到了完全相同的错误。

最佳答案

您忘记了 std::bind 的第四个参数,这是您要在其上调用非静态成员函数的实例。由于它不对(不存在的)类成员数据进行操作,因此我认为它应该是static,在这种情况下您不需要实例。

也就是说,如果你想绑定(bind)到一个非静态成员函数,你可以这样做:

auto test = std::bind(&SomeClass::test_function, this, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3);
// you can also bind *this

或(如果没有绑定(bind)参数,这没有意义 - 绑定(bind)abc):

auto test = std::bind(&SomeClass::test_function,
std::placeholders::_1, std::placeholders::_2,
std::placeholders::_3, std::placeholders::_4);
test(this, a, b, c); // you can also pass a reference

诸如此类。

关于c++ - 无法 std::bind 成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35325607/

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