주어진 템플릿 인수에 대해 Qt typedef 별칭을 거의 만들지 않는 도우미 클래스를 사용하고 싶습니다. Ofc ambiguous는 십자가를 매우 빨리 그리고 심지어는 현재과 Derived
에 액세스하기를 원하기 때문에 프로젝트의 현재 디자인 상황에 자주 등장합니다. 이 문제가 어떻게 든 해결할 수있는 것인지 확실하지 않아도 여전히 문제를 해결할 수 있습니다. 예 :모호한 문제 피하기 C++
template <class T> class SmartAlias
{
public:
typedef QSharedPointer<T> Shared;
};
class Base : public SmartAlias<Base>
{
};
class Derived : public Base, public SmartAlias<Derived>
{
};
Base::Shared base; // Normally works
Derived::Shared derived; // ambiguous problem
더 좋은 해결책이 있습니까? 감사.
요약/UPDATE/솔루션
하나는이를 사용하고자하는 경우, 또한 가상 상속을 사용하여 다중 상속을 위해 확장 될 수 안톤 아버님 께 구원 아이디어로 이동, 그것을 요약하면 :
#include <vector>
template <typename T, typename... MyBases> class SmartAlias : virtual public MyBases... {
public:
typedef std::vector<T> Shared;
};
class Base : public SmartAlias<Base>
{
};
class Derived : public SmartAlias<Derived, Base>
{
};
class MiniBase : public SmartAlias<MiniBase> {};
class MiniDerived : public SmartAlias<MiniDerived, MiniBase, Derived> {
public:
MiniDerived() : MiniBase(), Derived()
{
}
};
int main() {
Base::Shared base;
Derived::Shared derived;
MiniDerived::Shared md;
}
을
다른 한편으로는 Frerich Raabe가 언급 한 나의 현재 해결책을 고수 할 것입니다.
'Shared'앞에 예상되는 중첩 이름 지정자를 컴파일하지 않습니다. 인터넷 검색 ... – krizajb
pre-C++ 11에서 @krizajb 대신에'typedef'를 사용해야합니다 –
멋진 작품이지만 물건을 쓸모 없게 만듭니다 :) – krizajb