문제

나는 템플릿 클래스가 (부분적으로)로 정의되어 있습니다.

template <class T> MyClass
{
public:
   void DoSomething(){}
};

다른 클래스에서 Dosomething을 호출하고 싶지만 같은 장소의 여러 't'유형에 대해이 작업을 수행 할 수 있다면 메소드 함수 포인터가 클래스 유형에 고유하게 제한되므로 아이디어가 갇혀 있습니다. 물론 각 MyClass는 다른 유형이므로 '다형성'방식으로 MyClassDoSomething ()에 기능 포인터를 저장할 수 없습니다.

내 유스 케이스는 홀딩 클래스에서 한 곳에서 저장된 모든 클래스에 전화를 걸 수 있도록 홀딩 클래스에서 'DoMething'에 대한 벡터를 저장하고 싶습니다.

제안이 있습니까?

도움이 되었습니까?

해결책

자, Functor 솔루션이 필요한대로 작동하지 않습니다. 아마도 템플릿 클래스에 공통 기본 "인터페이스"클래스에서 상속되어 있어야합니다. 그리고 당신은 그것의 벡터를 사용합니다.

이 같은:

class Base { 
public:
  virtual ~Base(){}
  virtual void DoSomething() = 0;
}

template <class T> class MyClass : public Base {
public:
    void DoSomething(){}
};

std::vector<Base *> objects;
objects.push_back(new MyClass<int>);
objects.push_back(new MyClass<char>);

다른 팁

알다시피, 그것이 제가해야 할 일입니다. Bizzarly 나는 초기에 저를 탈출하는 이유 때문에 초기에 USECASE에 유효한 솔루션으로 할인했습니다. 나는 컴파일 타임 파견을 위해 같은 장소에서하고있는 메타 프로 그램 일에 대해 눈을 멀게했다고 생각합니다 (즉, 혼란스러운 컴파일 시간과 내 뇌에서 런타임).

충격에 감사드립니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top