Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию
типа:
class Class
{
public:
int a;
list<Class> ClassList;
};
Vector пропускается на ура. А вот со списком проблемы.
Очень не хочется с указателями возиться.
Юзается STL, входящий в обычный EE без всяких дополнений и сервис паков.
Здравствуйте Ascoder, Вы писали:
A>Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию A>типа:
A>class Class A>{ A>public: A> int a; A> list<Class> ClassList; A>};
Я не автор, но проблема похожая. Ессесно там нужно указывать указатель на структуру, чтобы всё компилилось. Но вот компилится, а как дальше юзать это дело? (: Надо разобраться.
struct A
{
string str;
list<A*> B;
}
Как мне получить данные после того, как я заюзал такое:
A _AA,_BB;
Здравствуйте, Ascoder, Вы писали:
A>Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию A>типа:
A>class Class A>{ A>public: A> int a; A> list<Class> ClassList; A>};
A>Vector пропускается на ура. А вот со списком проблемы. A>Очень не хочется с указателями возиться. A>Юзается STL, входящий в обычный EE без всяких дополнений и сервис паков.
Видимо твоя реализация STL использует в list dummy объект шаблонного типа, и закольцовывает список на него...
Здравствуйте, Ascoder, Вы писали:
A>Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию A>типа:
A>class Class A>{ A>public: A> int a; A> list<Class> ClassList; A>};
A>Vector пропускается на ура. А вот со списком проблемы. A>Очень не хочется с указателями возиться. A>Юзается STL, входящий в обычный EE без всяких дополнений и сервис паков.
Вообще говоря, шаблоны стандартной библиотеки нельзя использовать с неполными типами. Смотри 17.4.3.6/2 или поиск по "incomplete+template".
В Качестве решения можно попробовать такой финт:
class ClassBase
{
public:
int a;
};
class Class : public ClassBase
{
public:
list<ClassBase> ClassList;
};
Здравствуйте, Bell, Вы писали:
B>Вообще говоря, шаблоны стандартной библиотеки нельзя использовать с неполными типами. Смотри 17.4.3.6/2 или поиск по "incomplete+template". B>В Качестве решения можно попробовать такой финт:
B>
B>class ClassBase
B>{
B>public:
B> int a;
B>};
B>class Class : public ClassBase
B>{
B>public:
B> list<ClassBase> ClassList;
B>};
B>
+1
Еще можно CRTP прикрутить.
P. S.
#include <list>
struct Node
{
int value;
std::list<Node> children;
};
int main()
{
Node n;
n.children.push_back(n);
}
vc71, vc8, g++/3.4.2 — OK.
До последнего не верил в пирамиду Лебедева.
Re[3]: STL list
От:
Аноним
Дата:
25.09.06 13:10
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, Bell, Вы писали:
B>>Вообще говоря, шаблоны стандартной библиотеки нельзя использовать с неполными типами. Смотри 17.4.3.6/2 или поиск по "incomplete+template". B>>В Качестве решения можно попробовать такой финт:
как я понял у Curiously Recurring Template немного другая идея:
template<typename T> class Base;
class Derived: public Base<Derived>;
а вот в конструкции:
-----------------------------------------------------------------------------------------
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Roman Odaisky, Вы писали:
RO>>Здравствуйте, Bell, Вы писали:
B>>>Вообще говоря, шаблоны стандартной библиотеки нельзя использовать с неполными типами. Смотри 17.4.3.6/2 или поиск по "incomplete+template". B>>>В Качестве решения можно попробовать такой финт:
RO>>vc71, vc8, g++/3.4.2 — OK.
А>как я понял у Curiously Recurring Template немного другая идея: А> template<typename T> class Base; А> class Derived: public Base<Derived>; А>а вот в конструкции: А>
А>Node n;
А>n.children.push_back(n);
А>
А>добавляется копия самого же объекта — в чем идея?
C>Будет срезка при помещении объекта наследного класса Class в контейнер значений класса ClassBase. std::контейнеры не полиморфны.
Если в списке нужно хранить объекты типа Class, то такое решение, конечно же не подходит. А вот если можно ограничиться типом ClassBase — тогда ое вполне применим