일부 처리를 사용자 정의하기 위해 콜백 함수를 등록해야하는 C 라이브러리가 있습니다. 콜백 함수의 유형은 int a(int *, int *)
입니다.C++ 클래스 멤버 함수를 C 콜백 함수로 사용
나는 콜백 함수로 다음과 C를 등록하려고 ++ 클래스 함수와 유사 C++ 코드를 작성하고 있습니다 :
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
내 질문 :
class A {
public:
A();
~A();
int e(int *k, int *j);
};
A::A()
{
register_with_library(e)
}
int
A::e(int *k, int *e)
{
return 0;
}
A::~A()
{
}
컴파일러는 오류 다음 발생
- 우선 내가하려고하는 것처럼 C++ 클래스 멤버 함수를 등록 할 수 있으며, 그렇다면 h 오우? (나는 http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html에서 32.8을 읽었지 만 제 생각에는 문제가 해결되지 않습니다)
- 대체 방법/더 좋은 방법이 있습니까?
예. 그 해결책이 효과가있었습니다. 컴파일러가 오류를 표시하지 않는다는 것이 혼란 스럽습니다. int (A ::, int *, int *) 'int() (int, int *)' – Methos
과 일치하지 않습니다. A : :)는 함수가 클래스 A의 일부이고, 거기에서 'this'포인터를 의미한다는 것을 의미합니다. – GManNickG
난 궁금해서 ... 표준에 명시되어 있니? 방금 수업을 훑어 보았지만 찾지 못했습니다. 그럼에도 불구하고, 매우 흥미 롭습니다. 모든 컴파일러가 반드시 비 정적 멤버 함수를 이런 방식으로 처리해야한다고 생각하지 않습니다. – Tom