C++ 11을 사용합니다. 다른 구성 파일을 한 줄씩 파싱하기 위해 Base
클래스와 파생 클래스가 여러 개 있습니다.CRTP 및 void 반환 메소드 *
template <class T>
class Base
{
public:
virtual ~Base();
bool load_from_file(const QString& str);
virtual void* get_data(const QString& str) const = 0;
private:
QList<QSharedPointer<T> > items_;
};
각 자손 (class Derived: public Base<My_struct>
)는 get_data()
구현을 제공해야합니다.
각 My_struct
인스턴스에는 설정 파일의 특정 행에 대한 정보가 들어 있습니다.
예를 들어, 프록시 목록이있는 일반 파일을 생각해보십시오.
My_struct
인스턴스는 load_from_file()
메서드의 Base
클래스에 스마트 포인터로 래핑되고 items_
멤버에 추가됩니다. load_from_file()
메서드는 포장하기 전에 void*
~ T*
을 캐스팅합니다.
void*
(및 boost::any
과 같은 라이브러리가없는) 클래스를 사용하지 않으려면 이러한 클래스를 다시 디자인 할 수 있습니까?
CRTP를 고려한다는 의미입니다. 보통 CRTP 예제는 void
반환 값 (파스칼의 프로 시저와 같은)을 가진 파생 클래스의 메서드를 포함합니다.
'get_data'가 실제로 어떤 유형으로 반환하겠습니까? 'My_struct'? –
CRTP는'Derived : public Base'입니다. 다른 구조체가 아닙니다. 그러면 함수는'T *'를 반환 할 수 있습니다. –
@ MarkRansom, 파생 클래스 중 하나에서 My_struct *를 반환하고 싶습니다. – ilya