gpt4 book ai didi

c++ - 将一个仿函数的实例传递给另一个仿函数

转载 作者:行者123 更新时间:2023-11-30 03:02:29 25 4
gpt4 key购买 nike

出于结构原因,我希望能够将仿函数的实例传递给另一个仿函数。目前,我通过将指向函数的指针传递给我的仿函数来实现等效的东西。

我试图将这个想法封装在下面的一些最小代码中:

class A
{
private:
double _x, _y, _z;

public:
A (double x, double y, double z) : _x(x), _y(y), _z(z) {};

void operator() (double t) const
{
// Some stuff in here that uses _x, _y, _z, and t.
}
};

class B
{
private:
// What is the type of the functor instance?
??? A ???

public:
// How do I pass the instance of A into B at initialisation?
B (??? A ???) : ??? : {};

void operator() (double tau) const
{
// Something that uses an instance of A and tau.
}
};

int main(void)
{
// I want to do something like this:
A Ainst(1.1, 2.2, 3.3); // Instance of A.
B Binst(Ainst); // Instance of B using instance of A.

Binst(1.0); // Use the instance of B.

return 0
}

本质上,我希望能够链接仿函数。如上所述,我目前通过将函数指针与变量 x、y 和 z 一起传递给 B 来实现。在我的代码中,B 是模板化的,目标是编写一次,然后在以后不做任何修改地重用它,这意味着将 x、y 和 z 交给 B 并不理想。另一方面,A 将针对我编写的每个程序进行定制。我不介意 B 很乱,但我希望 A 干净整洁,因为这是将要暴露的部分。

对于了解一些量子力学的人来说,B 是薛定谔方程(或主方程),A 是时间相关的哈密顿量。变量 x、y 和 z 用于构造哈密顿量,t 是时间,允许我使用 odeint库(所以我使用的是 ublas 和其他几个 Boost 位)。

最佳答案

使用引用?

class A { /* ... */ };

class B
{
A &a;

public:
B(const A &my_a)
: a(my_a)
{ }

// ...
};

关于c++ - 将一个仿函数的实例传递给另一个仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122285/

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