장치 총칭에서 (잠재적으로 쓸데없는) 시도로 마이크로 컨트롤러 용 내장 라이브러리를 개발하려고합니다. 본질적으로, CallbackStruct
이라는 헤더에 struct
이 선언되어 있습니다.이 포인터는 UART 객체의 다운 스트림 제어를위한 모든 기능 포인터를 가지고 있습니다 (예 : Arduinos의 Serial
개체).함수 포인터를 생성자에서 전용 변수로 저장
문제는 하나의 함수 포인터를 (특히 구조체에서 참조 해제 할 때) private 변수로 저장되는 다른 포인터로 할당하는 방법을 잘 모르겠다는 것입니다. 본질적으로, 나는 함수 포인터를위한 적절한 C++ 구문을 이해해야한다.
헤더 : 여기에 지금까지 가지고 무엇
class SomeUARTDevice {
public:
struct CallbackStruct {
void (*init) (int);
void (*xmit) (char *);
int (*recv) (void);
int (*avbl) (void);
void (*flsh) (void);
void (*kill) (void);
};
SomeUARTDevice (struct CallbackStruct *sc);
private:
void (*init_callback) (int);
void (*xmit_callback) (char *);
int (*recv_callback) (void);
int (*avbl_callback) (void);
void (*flsh_callback) (void);
void (*kill_callback) (void);
}
그리고, 다음 클래스 소스 :
SomeUARTDevice::SomeUARTDevice (struct CallbackStruct *sc) {
init_callback = sc->init;
}
이 함수 포인터를 할당하는 적절한 방법이다 (그렇지 않은 경우 , 내가 얼마나 멀리 떨어져 있냐 - 조금씩, 또는 마일 정도)?
다른 구문 boo-boos가있는 경우, 나는 주된 작업 중 혼란없이 문제를 설명하기 위해 예제로 함께 던졌습니다.
당신이 구조체의 복사본을 저장하지 왜 이유가 있습니까? – OnMyLittleDuck
당신이하려는 것은 수동으로 가상 함수를 다시 구현한다는 것입니다. –
@OnMyLittleDuck 구조체는 주로이므로 모든 함수 포인터 참조를 생성자 인수 공간에 넣지 않아도됩니다. 저는 구조체를 직접 호출 할 수 있다고 생각합니다. 그러나 작성 당시에는 그 순열을 거치지 않았습니다. – ecfedele