구조상 이유로 functor의 인스턴스를 다른 functor로 전달할 수 있습니다. 지금은 함수에 대한 포인터를 함수 작성기로 전달하여 비슷한 결과를 얻습니다.functor 인스턴스를 다른 functor에 전달
나는 아래 최소한의 코드에서 아이디어를 캡슐화을 시도했습니다 본질적으로
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가 노출 될 부분이기 때문에 A가 좋고 깨끗하기를 바란다.
일부 양자 역학을 아는 사람들에게는 B가 슈뢰딩거 방정식 (또는 마스터 방정식)이고 A는 시간 의존형 해밀턴 학자입니다. 변수 x, y, z는 해밀턴을 구성하는 데 사용되며, t는 시간이므로, odeint 라이브러리를 사용할 수 있습니다 (그래서 나는 ublas와 몇 가지 다른 부스트 비트를 사용하고 있습니다).
std :: bind가 필요합니다. 펑터를 연결하고 매개 변수를 바인딩 할 수 있습니다. – innochenti