У меня есть следующий фрагмент кода:
template <typename T>
struct ChildStruct
{
typedef std::map<int,T> Tmap;
};
struct DataStruct: public ChildStruct<long>
{
};
void Test()
{
DataStruct::ChildStruct<long>::Tmap map;
}
Возможно ли получить доступ к Tmap typedef, расположенному в ChildStruct, из-за пределов DataStruct без определения типа этого ChildStruct внутри Datastruct?
Когда я использую упомянутый фрагмент кода в Visual Studio, все работает нормально, но linux / macos g ++ выдает ошибку:
error: 'ChildStruct' is not a member of 'DataStruct'
Я нашел способ, определив вспомогательный typedef внутри od DataStruct:
struct DataStruct: public ChildStruct<long>
{
typedef ChildStruct<long> ChildStructLong;
};
void Test()
{
DataStruct::ChildStructLong::Tmap map;
}
Но я бы предпочел путь без ChildStructLong определения.
Спасибо!
Отредактировано:
Решением является вызов ChildStruct непосредственно из-за пределов DataStruct, как предполагает Кристиан Рау. Иногда самое простое решение - лучшее решение; -)