몇 가지 제한 사항을 신경 쓰지 않는 한 매우 쉽습니다. 작업을 수행하는 가장 쉬운 방법은 하나의 공통 기본 클래스에서 비롯된 클래스로 제한합니다. 이 경우에, 당신은 같은 것을 할 수 있습니다
struct eval_x : functor_base {
virtual bool operator()() { std::cout << "eval_x"; }
};
struct eval_y : functor_base {
virtual bool operator()() { std::cout << "eval_y"; }
};
그런 다음 우리는 각각의 객체를 생성 할 수있는 방법이 필요합니다 :
는
// warning: I've done this before, but none of this code is tested. The idea
// of the code works, but this probably has at least a few typos and such.
struct functor_base {
virtual bool operator()() = 0;
};
당신은 분명히 그 염기로부터 유도 된 몇 가지 구체적인 클래스가 필요합니다 유형 : 마지막으로
functor_base *create_eval_x() { return new eval_x; }
functor_base *create_eval_y() { return new eval_y; }
, 우리는 공장 기능에 이름과지도가 필요합니다
일반적인 주제에 많은 변화가 물론있다
char *name = "eval_x";
// the map holds pointers to functions, so we need to invoke what it returns
// to get a pointer to a functor:
functor_base *b = name_mapper.find(name)();
// now we can execute the functor:
(*b)();
// since the object was created dynamically, we need to delete it when we're done:
delete b;
: 우리는 함수 객체에 이름에서 매핑 할 수 있도록 (! 마지막으로) 충분히 우리를 준다
. 예를 들어, 오브젝트를 동적으로 작성하는 팩토리 함수 대신에 정적으로 각 오브젝트의 인스턴스를 작성하고 정적 오브젝트의 주소를 맵에 넣을 수 있습니다.
... 내 지식으로는 불가능합니다. 너 그런 식으로 원하는 이유가 뭐야? – quasiverse
음 ... 괜찮은 것 같아 보이지 않는 것 같습니다. 비용을 계산할 때 프로그램에서 사용하게 될 설정 파일에 비용 기능을 지정하고 싶었습니다. –
파일에서 실제 코드를 원한다면 내 대답을 무시하십시오. 그것은 참으로 가꾼이 아닙니다. – Jollymorphic