gpt4 book ai didi

c++ - 将继承的方法传递给另一个方法

转载 作者:太空狗 更新时间:2023-10-29 23:44:14 24 4
gpt4 key购买 nike

我正在尝试构建一个类,该类的成员函数以方法作为参数。这些方法在继承的类中定义。我建立了一个最小的例子:

#include <iostream>

struct base
{
base() {}

int number(int (*f)(int))
{
return f(1);
}
};

struct option1 : base
{
int timesTwo(int i){return 2*i;}
option1()
{
std::cout << number(timesTwo);
}
};

struct option2 : base
{
int timesThree(int i){return 3*i;}
int timesFour (int i){return 4*i;}
option2()
{
std::cout << number(timesThree);
}
};

int main()
{
option1 a; //I would expect this to print "2"
}

number 函数中的当前语法是针对一般函数的,但我无法使其适用于任何继承类的方法。

最佳答案

这里的问题是您传递了一个指向成员 函数的指针,这与指向非成员函数的指针完全不同(这是您的编号 函数接受一个参数)。

你可以使用 std::functionstd::bind :

int number(std::function<int(int)> f)
{
return f(1);
}

...

number(std::bind(&option1::timesTwo, this, _1));

你也可以使用模板和额外的参数,比如

template<typename T>
int number(T* object, int(T::*f)(int))
{
return (object->*f)(1);
}

...

number(this, &option1::timesTwo);

或者简单的(但并不总是正确的,取决于情况和用例):使回调函数静态:

static int timesTwo(int i){return 2*i;}

我的建议是您使用 std::function 查看解决方案,因为这样可以很容易地使用任何类型的可调用对象调用 number 函数,例如 lambda :

number([](int x){ return x * 2; });

关于c++ - 将继承的方法传递给另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672691/

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