gpt4 book ai didi

c++ - 传递成员函数(或解决方法)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:56 25 4
gpt4 key购买 nike

我想做以下事情:

class A{
private:
//some data
B b;
double f(double);
public:
A(){
b = new B(f); // does not work of course
}
};

class B{
public:
B(double (*func)(double));
};

B 类应该解决由函数 func 指定的数学问题。 A 类现在应该使用 B 来解决 func=f 的这个问题。成员函数 f 访问 A 的私有(private)数据成员。当然,问题是我不能简单地将指针传递给成员函数。我知道有办法做到这一点,但 B 应该仍然能够承担任何职能,而不仅仅是 A 的成员。到目前为止,我只是将 f 和 A​​ 的成员设为静态,但我认为这是一个相当糟糕的设计。您能想出任何解决方法吗?

最佳答案

您可以使用标准 std::function<> 模板作为函数的多态包装器。


你的类(class) B简单地存储 std::function<double (double)> 的一个实例并通过 foo 调用它:

class B
{
public:
B(const std::function<double (double)>& func) : func(func) {}

void foo(double d)
{
std::cout << func(d);
}

private:
std::function<double (double)> func;
};

虽然你的课A构建其 B成员及其成员函数之一( f ),感谢 std::bind :

class A
{
public:
double md;
B b;

double f(double d) const
{
return md * d;
}

public:
A(double d) : md(d), b(std::bind(&A::f, this, std::placeholders::_1)) { }
};

我们现在可以简单地使用它了:

int main() {
A a(42);
a.b.foo(2); // Output : 84
}

Live demo here .

关于c++ - 传递成员函数(或解决方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910865/

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