powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Темплейты и структуры
19 сообщений из 19, страница 1 из 1
Темплейты и структуры
    #39107249
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Есть небольшой вопрос по исползованию темплейтов.
Есть следующая структура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
typedef struct ISO_struct
{
    char        FLDName[32];
    char        tag[4];
    short       data_type;
    bool        arr;
    char*      data;
    ISO_struct  *subelement;
    int         (*ptrfun)(ISO_struct *xml_ptr, char* buf);
}ISO_struct;



нужно привести её к такому типу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template<class T>
typedef struct ISO_struct:T
{
    char        FLDName[32];
    char        tag[4];
    short       data_type;
    bool        arr;
    T           data;
    ISO_struct  *subelement;
    int         (*ptrfun)(ISO_struct *xml_ptr, char* buf);
}ISO_struct;


но у меня выскакиваeт ошибка
Код: plaintext
1.
error: template declaration of ‘typedef’


Есть метод как ето решить? Tyepеdef обязателен, для рекурсии
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107278
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenTyepеdef обязателен, для рекурсииЭто что-то новенькое в мироздании.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template<class T>
struct ISO_struct
{
    char        FLDName[32];
    char        tag[4];
    short       data_type;
    bool        arr;
    T           data;
    ISO_struct<T>  *subelement;
    int         (*ptrfun)(ISO_struct<T> *xml_ptr, char* buf);
};
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107282
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю, буду дальше колдовать
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107366
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,
я вообще не вижу здесь рекурсии. Вы же не структуру внутри используете, а указатель на неё.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107370
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagadj_raven,
я вообще не вижу здесь рекурсии. Вы же не структуру внутри используете, а указатель на неё.
Даже если бы он захотел, то не получилось бы. Согласно стандарту, если я не ошибаюсь, класс не может содержать объект определяемого типа.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107471
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryBagaBagadj_raven,
я вообще не вижу здесь рекурсии. Вы же не структуру внутри используете, а указатель на неё.
Даже если бы он захотел, то не получилось бы. Согласно стандарту, если я не ошибаюсь, класс не может содержать объект определяемого типа. Это и без стандарта ясно, что невозможно определить тип если не определен размер его составляющих.

Такой код мог бы ввергнуть наивный компилятор в рекурсию:

Код: plsql
1.
2.
3.
class C {
   C c;
};



А тут размер P еще не известен:

Код: plsql
1.
2.
3.
4.
class P;
class C {
   P p;
};



Но размер ссылок и указателей на все что угодно известен, поэтому следующие конструкции допустимы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
class P;
class C {
   C *d;
   C &e;
   P *pd;
   P &pe;
};
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39107505
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenДень добрый.
Есть небольшой вопрос по исползованию темплейтов.
Есть следующая структура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
typedef struct ISO_struct
{
    char        FLDName[32];
    char        tag[4];
    short       data_type;
    bool        arr;
    char*      data;
    ISO_struct  *subelement;
    int         (*ptrfun)(ISO_struct *xml_ptr, char* buf);
}ISO_struct;



нужно привести её к такому типу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template<class T>
typedef struct ISO_struct:T
{
    char        FLDName[32];
    char        tag[4];
    short       data_type;
    bool        arr;
    T           data;
    ISO_struct  *subelement;
    int         (*ptrfun)(ISO_struct *xml_ptr, char* buf);
}ISO_struct;


но у меня выскакиваeт ошибка
Код: plaintext
1.
error: template declaration of ‘typedef’


Есть метод как ето решить? Tyepеdef обязателен, для рекурсии


Да, есть. Нафиг убери typedef. Он не нужен.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39108410
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabSashaMercuryпропущено...

Даже если бы он захотел, то не получилось бы. Согласно стандарту, если я не ошибаюсь, класс не может содержать объект определяемого типа. Это и без стандарта ясно, что невозможно определить тип если не определен размер его составляющих.

Такой код мог бы ввергнуть наивный компилятор в рекурсию:

Код: plsql
1.
2.
3.
class C {
   C c;
};



А тут размер P еще не известен:

Код: plsql
1.
2.
3.
4.
class P;
class C {
   P p;
};



Но размер ссылок и указателей на все что угодно известен, поэтому следующие конструкции допустимы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
class P;
class C {
   C *d;
   C &e;
   P *pd;
   P &pe;
};



Хорошо что вам ясно это и без стандарта ;)
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39108411
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не всё так очевидно, потому лучше лишний раз на него сослаться, чем сделать собственный вывод, пусть он и очевидный. Любое предложение из стандарта будет, как правило, важнее любых собственных выводов разработчиков.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39108580
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, это я к тому, что у стандарта есть объективные предпосылки, которые полезно знать. Конечно это не отменяет пользы от знания самого стандарта.

Так в java все объектные переменные являются ссылками, поэтому синтаксически допустимо рекурсивное объявление членов класса. Но фактически это объявление ссылки.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109388
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabSashaMercury, это я к тому, что у стандарта есть объективные предпосылки, которые полезно знать.Я тебя огорчу, но ты заблуждаешься.
Объективных предпосылок у стандартов языков нет. У любых языков, включая С++. Все эти предпосылки исключительно субъективны. Автор языка думает: "а вот такая фича будет удобной, наверное... ну потом разберемся". А последующие поколения вынуждены с этим кошмаром жить.

mcureenabТак в java все объектные переменные являются ссылками, поэтому синтаксически допустимо рекурсивное объявление членов класса. Но фактически это объявление ссылки.Одно с другим не связано.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109681
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, придумай язык в котором можно скомпилировать класс с рекурсией.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109747
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabWhite Owl, придумай язык в котором можно скомпилировать класс с рекурсией.Что ты мне за это дашь?
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109815
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabWhite Owl, придумай язык в котором можно скомпилировать класс с рекурсией.
Очевидно любой язык, в котором классы - ссылочные типы. Иначе никак.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109839
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabязык в котором можно скомпилировать класс с рекурсией.
Класс с рекурсией - это просто бесконечный массив из элементов класса. Вполне возможно реализовать в языках с отложенным вычислением ))
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109915
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskymcureenabязык в котором можно скомпилировать класс с рекурсией.
Класс с рекурсией - это просто бесконечный массив из элементов класса. Вполне возможно реализовать в языках с отложенным вычислением )) бесконечный массив наверное будет бесконечно компилироваться, или займет бесконечно много памяти. т.е. объективно практически бесполезен. хотя... если в язык добавить прагму, прерывающую рекурсию, то можно и замутить. но можно и без извращений то же самое сделать из достаточно длинной цепочки классов.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109923
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskymcureenabязык в котором можно скомпилировать класс с рекурсией.
Класс с рекурсией - это просто бесконечный массив из элементов класса. Вполне возможно реализовать в языках с отложенным вычислением ))
Нет, ты 1й экземпляр не создашь. Неизвестен размер.
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109976
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabAnatoly Moskovskyпропущено...

Класс с рекурсией - это просто бесконечный массив из элементов класса. Вполне возможно реализовать в языках с отложенным вычислением )) бесконечный массив наверное будет бесконечно компилироваться, или займет бесконечно много памяти. т.е. объективно практически бесполезен. хотя... если в язык добавить прагму, прерывающую рекурсию, то можно и замутить. но можно и без извращений то же самое сделать из достаточно длинной цепочки классов.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class A {
public:
  A() {};
  class A *next;
};

A *a = new A();
a->next = a;

Очень длинная цепочка... Которая будет бесконечно компилироваться и бесконечно выполняться...
...
Рейтинг: 0 / 0
Темплейты и структуры
    #39109994
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглНет, ты 1й экземпляр не создашь. Неизвестен размер.
Вы рассуждаете в терминах С++, а речь шла про новый язык.
Принципиально размер экземпляра не нужен если например никаких экземпляров рекурсивного класса не создается, а все это синтаксический сахар над более простой структурой данных )).
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Темплейты и структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]