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. никому не кажется лишним правило о строгом порядке объявления?


[#]  

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

typedef B::C * DataPtr;

Да. %)

()
[#]  

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

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

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

**** ()
[#]  
www_linux_org_ru

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

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от Miguel 23.11.2009 21:14:00  
www_linux_org_ru

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

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

на DCC? я там документации нашел 3 странички, а хаскель нормальным не считаю

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 23.11.2009 19:04:54  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от Miguel 23.11.2009 21:14:00  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 7:31:25  
lester_dev

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

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

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

***** ()
[#]  

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 8:51:02  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 10:41:57  

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 10:41:57  
lester_dev

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 10:44:45  

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

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 10:45:10  

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

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

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:11:17  
lester_dev

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

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:10:39  

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

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

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

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от Valeriy_Onuchin 24.11.2009 8:34:40  

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

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

> typedef struct mystruct {

> ...

> } mystruct ;


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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 11:13:37  

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

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

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


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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 11:15:12  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:25:41  

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

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

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:36:08  

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

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:25:41  
lester_dev

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

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

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

***** ()
[#]  
staseg

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

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

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

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

** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 11:38:00  

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

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

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 всегда перед глазами. Второй вариант чем читабельнее?

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 11:54:57  

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

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

спасибо

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


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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 11:15:12  
const86

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

>>-----Цитата---->>

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

struct B {
struct C {
практически не встречаются

<<-----Цитата----<<

std::vector::iterator?

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от const86 24.11.2009 11:57:01  

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

> std::vector::iterator?

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 11:59:01  
lester_dev

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 12:04:30  
const86

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

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 12:04:30  

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

фаел boost/smart_ptr/detail/spinlock_pool.hpp
подкласс template<int I> class spinlock_pool::scoped_lock

()
[#] Ответ на: [c++] forward declaration для подструктуры. от const86 24.11.2009 12:18:46  

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

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

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

> std::vector::iterator?

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


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

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


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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 12:21:08  

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от const86 24.11.2009 12:18:46  
lester_dev

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

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

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

struct CImpl{
    int ololo;
};

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 12:25:28  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 12:40:06  

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

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

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

**** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester_dev 24.11.2009 12:26:15  
const86

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

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

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

***** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от lester 24.11.2009 12:46:51  

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

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

()
[#] Ответ на: [c++] forward declaration для подструктуры. от l5k 24.11.2009 12:51:33  

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

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

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

** ()
[#] Ответ на: [c++] forward declaration для подструктуры. от name_no 24.11.2009 12:58:52  

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

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

()