STL list
От: Ascoder  
Дата: 17.03.02 07:57
Оценка:
Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию
типа:

class Class
{
public:
int a;
list<Class> ClassList;
};

Vector пропускается на ура. А вот со списком проблемы.
Очень не хочется с указателями возиться.
Юзается STL, входящий в обычный EE без всяких дополнений и сервис паков.
Re: STL list
От: dv Россия derevyanko.blogspot.com
Дата: 17.03.02 08:35
Оценка: 5 (2)
Здравствуйте Ascoder, Вы писали:

A>Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию

A>типа:

A>class Class

A>{
A>public:
A> int a;
A> list<Class> ClassList;
A>};

http://www.rsdn.ru/forum/message.asp?mid=15683
Автор: The Lex
Дата: 04.12.01
Киса, скажите как художник — художнику: вы рисовать умеете?
Re[2]: STL list
От: SPy_SWAMP Мухосранск  
Дата: 22.09.06 17:37
Оценка:
Здравствуйте, dv, Вы писали:

dv>Здравствуйте Ascoder, Вы писали:


A>>Подскажите пожалуйтста как VC++ 6.0 заставить схавать конструкцию

A>>типа:

A>>class Class

A>>{
A>>public:
A>> int a;
A>> list<Class> ClassList;
A>>};

dv>http://www.rsdn.ru/forum/message.asp?mid=15683
Автор: The Lex
Дата: 04.12.01



Я не автор, но проблема похожая. Ессесно там нужно указывать указатель на структуру, чтобы всё компилилось. Но вот компилится, а как дальше юзать это дело? (: Надо разобраться.


struct A
{
 string str;
 list<A*> B;
}


Как мне получить данные после того, как я заюзал такое:
A _AA,_BB;


_BB.str = "test";
_AA.str = "123";
_AA.B.push_back(&_BB);


Так вот как мне потом "достать" этот самый "test" через _AA?
Re: STL list
От: IID Россия  
Дата: 22.09.06 19:08
Оценка:
Здравствуйте, 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 объект шаблонного типа, и закольцовывает список на него...
kalsarikännit
Re: STL list
От: Bell Россия  
Дата: 25.09.06 07:36
Оценка: 1 (1)
Здравствуйте, 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;
};
Любите книгу — источник знаний (с) М.Горький
Re[2]: STL list
От: Roman Odaisky Украина  
Дата: 25.09.06 10:37
Оценка:
Здравствуйте, 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>>В Качестве решения можно попробовать такой финт:


RO>Еще можно CRTP прикрутить.


RO>P. S.
#include <list>

RO>struct Node
RO>{
RO>    int value;
RO>    std::list<Node> children;
RO>};


RO>int main()
RO>{
RO>    Node n;
RO>    n.children.push_back(n);
RO>}
RO>

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);

добавляется копия самого же объекта — в чем идея?
Re[4]: STL list
От: SPy_SWAMP Мухосранск  
Дата: 25.09.06 13:43
Оценка:
-----------------------------------------------------------------------------------------
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Roman Odaisky, Вы писали:


RO>>Здравствуйте, Bell, Вы писали:


B>>>Вообще говоря, шаблоны стандартной библиотеки нельзя использовать с неполными типами. Смотри 17.4.3.6/2 или поиск по "incomplete+template".

B>>>В Качестве решения можно попробовать такой финт:


RO>>Еще можно CRTP прикрутить.


RO>>P. S.
#include <list>

RO>>struct Node
RO>>{
RO>>    int value;
RO>>    std::list<Node> children;
RO>>};


RO>>int main()
RO>>{
RO>>    Node n;
RO>>    n.children.push_back(n);
RO>>}
RO>>

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);
А>

А>добавляется копия самого же объекта — в чем идея?

-----------------------------------------------------------------------------------------

Вот решение сабжа:

class Class
{
 public:
    int a;
    list<Class*> ClassList;
};


Решение красиво. Ну а доступ к списку получать через итераторы.

list<Class*>::const_iterator bgn = Class.ClassList.begin();
list<Class*>::const_iterator end = Class.ClassList.end();

while (bgn != end)
{
 //делаем что-то
 ++bgn;
}


и так далее.
Re[2]: STL list
От: Centaur Россия  
Дата: 25.09.06 13:58
Оценка:
Здравствуйте, Bell, Вы писали:

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>


Будет срезка при помещении объекта наследного класса Class в контейнер значений класса ClassBase. std::контейнеры не полиморфны.
Re[3]: STL list
От: Bell Россия  
Дата: 25.09.06 14:07
Оценка:
Здравствуйте, Centaur, Вы писали:


C>Будет срезка при помещении объекта наследного класса Class в контейнер значений класса ClassBase. std::контейнеры не полиморфны.

Если в списке нужно хранить объекты типа Class, то такое решение, конечно же не подходит. А вот если можно ограничиться типом ClassBase — тогда ое вполне применим
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.