두 가지 소프트웨어 사이에서 어떤 종류의 브리지를 만들어야하지만 다루는 방법을 모르는 문제가 있습니다. 바라건대 누군가는 흥미롭고 (가능한) 작업 제안을 할 것입니다.C++ 클래스의 멤버를 처리해야하는 정적 함수
여기에 배경이 있습니다. 저는 C++ 소프트웨어 제품군을 보유하고 있습니다. 주어진 클래스 내의 일부 함수를 다른 함수로 대체해야하는데, 이는 괜찮습니다. 문제는 새 함수가 정적이어야하는 다른 함수를 호출하지만 클래스의 멤버를 처리해야한다는 것입니다. 이것은 저를 화나게 만드는 두 번째 기능입니다.
기능 나는 다음과 같은 오류가 정적이 아닌 경우 :
error: cannot call member function ‘void
MyClass::MyFunction(const double *)’ without object
또는
error: ‘this’ is unavailable for static member functions
: 나도 다음과 같은 오류가
error: argument of type ‘void (MyClass::)(…)’ does not match ‘void (*)(…)’
내가 정적으로 설정하면
"this"키워드 ("Function()"또는 "this-> Function()"사용 여부에 따라 다름).
마지막으로 클래스 객체에는 정적 함수에 전달할 수없는 몇 가지 인수가 필요합니다 (정적 함수 프로토 타입을 수정할 수 없음). 정적 함수 자체 내에 새 인스턴스를 만들 수 없습니다.
최소한의 재 작성으로 어떻게 이러한 문제를 해결할 수 있습니까?
편집 : 좋아, 여기에 내가해야 할 일에 대한 간단한 예제가 명확하고 정확 희망입니다 : 비 정적 멤버 함수에
// This function is called by another class on an instance of MyClass
MyClass::BigFunction()
{
…
// Call of a function from an external piece of code,
// which prototype I cannot change
XFunction(fcn, some more args);
…
}
// This function has to be static and I cannot change its prototype,
// for it to be passed to XFunction. XFunction makes iterations on it
// changing parameters (likelihood maximization) which do not appear
// on this sample
void MyClass::fcn(some args, typeN& result)
{
// doesn't work because fcn is static
result = SomeComputation();
// doesn't work, for the same reason
result = this->SomeComputation();
// doesn't work either, because MyClass has many parameters
// which have to be set
MyClass *tmp = new MyClass();
result = tmp->SomeComputation();
}
정적 함수는 정적 (정적이 아닙니다) 멤버 변수에 액세스 할 수 없습니다. 처음이자 마지막 시도는 무엇인지 확실하지 않습니다. 관련 코드를 표시 할 수 있습니까? –
코드를 알려주십시오. –
정적 함수의 선언과 정의가 포함 된 코드를 게시하십시오. 그렇지 않으면 무엇이 요구되는지 이해하기 어렵습니다. 정적 함수에는'this' 포인터가 없으므로'this->'를 할 수 없습니다. 함수에 매개 변수로 작업해야하는 객체를 전달해야합니다. – Naveen