많은 정적 공용 멤버 함수가있는 MyClass
클래스를 포함하는 MyNamespace
네임 스페이스가 있습니다. 컴파일러는 말한다네임 스페이스 내부의 멤버 함수에 대한 포인터
#include <iostream>
#include <map>
namespace MyNamespace {
class MyClass;
typedef bool (*fctPtr)(void);
typedef std::map<std::string, fctPtr> fctMap;
};
class MyNamespace::MyClass {
public:
static bool func1(void) { return true; };
static bool func2(void) { return true; };
static bool func3(void) { return true; };
static bool func4(void) { return true; };
};
MyNamespace::fctMap MyFctMap;
void execFct() {
MyNamespace::MyClass obj;
MyNamespace::fctPtr fctMemb;
fctMemb = MyFctMap["func1"];
(obj.*fctMemb)();
}
int main() {
MyFctMap["func1"] = &MyNamespace::MyClass::func1;
MyFctMap["func2"] = &MyNamespace::MyClass::func2;
MyFctMap["func3"] = &MyNamespace::MyClass::func3;
MyFctMap["func4"] = &MyNamespace::MyClass::func4;
execFct();
}
그리고 무엇 :
내가해야 할 일은는 여기에 클래스 코드의 모든 public 멤버 함수에 대한 포인터를 포함하는 map
, 네임 스페이스 안에 구축하는 것입니다
% clang++ draft.cc
draft.cc:29:7: error: right hand operand to .* has non pointer-to-member type
'MyNamespace::fctPtr' (aka 'bool (*)()')
(obj.*fctMemb)();
^~~~~~~~
1 error generated.
이 오류가 발생한 이유와이 문제를 해결하기 위해 수행 할 작업을 이해할 수 없습니다. 생각?
편집 : 저는 C++ 98을 사용하고 있습니다.
typedef bool (MyClass::*fctPtr)(void)
으로 작업하면지도 할당 시간에 이런 종류의 오류가 발생합니다.
error: assigning to 'mapped_type' (aka 'bool (MyNamespace::MyClass::*)()') from
incompatible type 'bool (*)()'
MyFctMap["func1"] = &MyNamespace::MyClass::func1;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
가 네, 편집, 들으 – tbenett