나는 dll과 일부 응용 프로그램 코드간에 공유되는 기본 클래스를 만들어야하는 프로그램을 가지고있다. 그런 다음 주 응용 프로그램의 dll 파일에 하나씩 두 가지 파생 클래스가 있습니다. 이들 각각에는 nase 클래스의 데이터에서 작동하는 일부 정적 멤버 함수가 있습니다. (다른 곳에서 함수 포인터로 사용되는 것처럼 정적 일 필요가 있습니다.) 가장 간단한 형태로 아래에 나와 있습니다.파생 클래스의 정적 함수에서 보호 된 기본 클래스에 액세스 할 수 있습니까?
내 컴파일러는 Derived가 Base에 대한 액세스를 보호했지만 pBase의 보호 된 멤버에 액세스 할 수 없다는 불만을 표시합니다. 이 주변에 어떤 방법이 있습니까, 아니면 제가 오해하고 있습니까? Base 변수를 public으로 만들 수는 있지만 실제 인스턴스에서는 할당 된 메모리의 덩어리와 멀티 스레딩을 위해이를 보호하기위한 세마포어처럼 좋지 않습니다.
도움 말?
가능한 [부모의 보호 된 변수에 액세스] (http://stackoverflow.com/questions/4829518/accessing-parents-protected-variables). 이것은 함수가 정적인지 아닌지에 대한 것이 아니라 기본 멤버가 액세스되는 매개 변수가 'Derived'유형이 아니기 때문입니다. –
static 함수에 대한 인수는 함수 포인터의 호출 요구 사항을 준수하는 기본 클래스 여야합니다. 어쩌면 동적 캐스팅을 사용하여이 문제를 해결할 수 있습니다. –
변환 할 수있는'static_cast'를 사용할 수있는'Derived' 객체의 기본 클래스 하위 객체 인'Base' 객체에 대한 포인터를 사용하여 함수가 호출되도록 제어 할 수 있다면 함수 본문에서'Base *'에서'Derived *'로 바뀝니다. 그렇지 않으면'Base'의'친구 '가되어야합니다. 그렇지 않으면'var'을 공개로 바꿀 수 있습니다. 이들 중 어느 것도 할 수 없다면 당신은 붙어 있습니다. –