LINUX.ORG.RU

[c++] forward declaration для подструктуры.

 


0

1

Можно конечно поменять местами декларации B и A, но хотелось бы сохранить такой порядок. Вопрос - как?

struct B;
struct B::C;

struct A {
  typedef B::C DataPtr;
  DataPtr c;
};

struct B {
  struct C {
    int ololo;
  };
  ...
};
Такое мой фю^W^W компилятор отказывается проглатывать. Причина по которой не нравится менять местами декларации: структуре B может понадобиться подструктура A - получаем пиздец.

P.S. никому не кажется лишним правило о строгом порядке объявления?


> никому не кажется лишним правило о строгом порядке объявления?

Переходи на нормальные языки.

Miguel ★★★★★
()

> P.S. никому не кажется лишним правило о строгом порядке объявления?

я считаю лишним

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Miguel

Я-то перешёл, а вот моя конторка не может себе позволить нанять цепепе-специалиста, студенты кругом. Какая уж тут речь о более других языках. Использование мною лиспа-то карается косыми взглядами, суки тупые.

l5k
() автор топика
Ответ на: комментарий от www_linux_org_ru

> а хаскель нормальным не считаю

Твои проблемы.

Miguel ★★★★★
()
Ответ на: комментарий от l5k

>Убого же. Лучше вынести подструктуры во вне и typedef-ить всё подряд.

так в чем проблема вынести B::C наружу и не городить всякий говнокод?

lester_dev ★★★★★
()

>> P.S. никому не кажется лишним правило о строгом порядке объявления?

порядок пофиг

kto_tama ★★★★★
()
Ответ на: комментарий от lester_dev

Структурированность - вещь, которую сложно понять другому человеку, имеющий, преимущественно, мусор в своей голове.

l5k
() автор топика
Ответ на: комментарий от l5k

вложенная запись читабельности не добавляет, а создание неймспейса дает такую же структурированность

lester ★★★★
()
Ответ на: комментарий от l5k

>Структурированность - вещь, которую сложно понять другому человеку, имеющий, преимущественно, мусор в своей голове.

это ты типа тонко тролльнул, да?

lester_dev ★★★★★
()
Ответ на: комментарий от lester

> вложенная запись читабельности не добавляет, а создание неймспейса дает такую же структурированность

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

l5k
() автор топика
Ответ на: комментарий от lester_dev

>>Структурированность - вещь, которую сложно понять другому человеку, имеющий, преимущественно, мусор в своей голове.

это ты типа тонко тролльнул, да?

Это я послал луч дружбы.

l5k
() автор топика
Ответ на: комментарий от l5k

>Это я послал луч дружбы.

Посылаю в ответку. Добро и любовь.

Так все-таки, что мешает вынести B::C в отдельный неймспейс?

lester_dev ★★★★★
()
Ответ на: комментарий от l5k

> Типа ты предлагаешь заменить родительскую структуру на якобы эквивалентный ей неймспейс?

B, C в один неймспейс - и все дела( если хочется указать, что они стоят обособленно ), вообще во вменяемых проектах конструкции вроде

[code]
struct B {
struct C {
[/code]

практически не встречаются

lester ★★★★
()
Ответ на: комментарий от Valeriy_Onuchin

> даже на чистом C желательно обьявлять, как
>

> typedef struct mystruct {

> ...

> } mystruct ;


И каков смысл такого действия в цепепе-коде?

l5k
() автор топика
Ответ на: комментарий от lester_dev

>>Это я послал луч дружбы.
>Посылаю в ответку. Добро и любовь.

>Так все-таки, что мешает вынести B::C в отдельный неймспейс?


Уже можно создать экземпляр неймспейса? лол

l5k
() автор топика
Ответ на: комментарий от lester

Вы, лесторы, два брата-акробата и фанатики кривого стандарта?
Почему, всё то что нельзя сделать в рамках ебанутого стандарта признаётся как невменяемым?
Не встречается такое(?) видимо по причине недостаточной гибкости цепепе.

l5k
() автор топика
Ответ на: комментарий от l5k

>Уже можно создать экземпляр неймспейса? лол

????? скажите мне, что это тролль

lester_dev ★★★★★
()
Ответ на: комментарий от l5k

> Не встречается такое(?) видимо по причине недостаточной гибкости цепепе.

ни в коем случае, как я уже говорил, такая запись менее читабельна и никаких преимуществ перед теми же неймспейсами не имеет

П.С. предлагаю спокойно продолжать обсуждение без взаимных оскорблений

lester ★★★★
()
Ответ на: комментарий от l5k

> Поподробнее, пожалуйста.

у вас слишком резкая манера общения, в данном случае не стандарты причина неиспользования описания вложенных структур

lester ★★★★
()
Ответ на: комментарий от l5k

>Не встречается такое(?) видимо по причине недостаточной гибкости цепепе.

если под гибкостью ты понимаешь возможность вырезать самому себе гланды через анус, то такой гибкости нет, да

lester_dev ★★★★★
()

Если очень хочется использовать в структуре другую, описанную в третьей, при этом используя первую из третьей, подумайте над тем, чтобы грамотно разнести описание структур в разные .h, максими возможного выносите в .cpp, а в .h пользуйтесь (по возможности) только объявлениями этих структур.

Но вообще такие перекрестные зависимости говорят о плохо продуманном интерфесе структур/классов или вообще всей программы.

P.S. не нравятся правила С++, используйте другой язык. Ибо он такой, какой он есть. Или сделайте свой с+++. Или пишите письма в комитет стандартизации языка. При текущем обосновании у вас, правда, нет шансов.

staseg ★★★★★
()
Ответ на: комментарий от lester

Про резкость далеко неправда. По поводу тебя - это от опыта чтения твоих флеймов, а они лольные.

struct Object1;
struct Object1::Data;
struct Object2;
struct Object2::Data;

struct Object1 {
  struct Data {
    ...
  };
  Data          *d1;
  Object2::Data *d2;
};

struct Object2 {
  struct Data {
    ...
  };
  Data *d2;
};
struct Object1Data;
struct Object2Data;

struct Object1 {
  typedef Object1Data Data;
  Data        *d1;
  Object2Data *d2;
};

struct Object2 {
  typedef Object2Data Data;
  Data *d2;
};

struct Object1Data {
  ...
};

struct Object2Data {
  ...
};

В первом варианте определение Data всегда перед глазами. Второй вариант чем читабельнее?

l5k
() автор топика
Ответ на: комментарий от l5k

> По поводу тебя - это от опыта чтения твоих флеймов, а они лольные.

спасибо

В первом варианте определение Data всегда перед глазами


именно, что мешает рассматривать собс-но Object1 и Object2

lester ★★★★
()
Ответ на: комментарий от const86

>std::vector::iterator?

А что это? Мб имелось ввиду std::vector<T>::iterator?

lester_dev ★★★★★
()
Ответ на: комментарий от lester_dev

>>ты правда посмотрел декларацию vector::iterator перед тем как привел его в пример?

кстати да, там typedef

А что там ещё могло быть? Проблему в топике пока не решили, так что выбора нет. Я лишь хотел напомнить, что вложенные структуры бывают полезны. Но реализовывать их как вложенные, видимо, мешает фича языка.

const86 ★★★★★
()
Ответ на: комментарий от const86

>> во вменяемых проектах конструкции вроде

struct B { struct C {

практически не встречаются


std::vector::iterator?

А что там ещё могло быть?



кажется кто-то уже забыл на что отвечал

Я лишь хотел напомнить, что вложенные структуры бывают полезны


приведя пример шаблонного класса без вложенной структуры

lester ★★★★
()
Ответ на: комментарий от l5k

как бы классы( а тем более шаблонные ) - это отдельный разговор, мы ведь про структуры в стиле С изначально разговаривали, нет?

lester ★★★★
()
Ответ на: комментарий от const86

А что там ещё могло быть? Я лишь хотел напомнить, что вложенные структуры бывают полезны.

автору топика следовало бы сделать

struct CImpl{
    int ololo;
};

struct B
{
typedef CImpl *C;
C data;
}

тогда вариант B::C имеет право на жизнь.

lester_dev ★★★★★
()
Ответ на: комментарий от lester

Нет, мы ведём разговор о структурах в стиле цепепе, а в общем - о некоемых ADT завязанных друг на друге. %)

l5k
() автор топика
Ответ на: комментарий от l5k

> Нет, мы ведём разговор о структурах в стиле цепепе

давайте тогда уточним - что кроме вложенности вам нужно от «структур в стиле цепепе»? я так понимаю в остальном вам нужен просто набор полей с данными?

lester ★★★★
()
Ответ на: комментарий от lester_dev

> автору топика следовало бы сделать

Чистой воды воркэраунд. С шаблоном и то красивше смотрится. Давайте уже скажем, что прямолинейного решения поставленной задачи нет и тема рассосётся сама собой.

const86 ★★★★★
()
Ответ на: комментарий от lester

Какая разница-то? Нужна вся функциональность struct/class. Ты пытаешься найти изъян в дизайне?

l5k
() автор топика
Ответ на: комментарий от l5k

> Какая разница-то? Нужна вся функциональность struct/class. Ты пытаешься найти изъян в дизайне?

а ты думаешь, что это нормальный дизайн, когда из B::C ты используешь А, полем которой B::C является? Да чтобы такое представить, нужно сойти с ума.

name_no ★★
()
Ответ на: комментарий от name_no

> а ты думаешь, что это нормальный дизайн, когда из B::C ты используешь А, полем которой B::C является?
Эмм... да, а что?
Можно узнать критерии нормальности дизайна или это как обычно - слепейший субъективизм?

l5k
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.