Форвард объявить возможный typedef c ++ 0x - PullRequest
4 голосов
/ 02 апреля 2011

Я понимаю из ответа на вопрос Форвард объявляет public typedef класса в c ++ , форвард объявления чего-то, что может быть typedef, невозможно в C ++.

Возможно ли сделать то, чтоэтот вопрос задается в C ++ 0x?

В противном случае внесение изменений, таких как:

class X {...};
typedef X Z;

в

class Y {...};
typedef Y Z;

, нарушает код клиента.

Я думаю, что это не должно быть так, потому что смысл typedefs состоит в том, что они должны сделать базовый тип прозрачным для клиента, так что вы можете изменить реализацию, не нарушая клиентский код.

Уточнение

По сути, допустим, у нас могут быть следующие два варианта:

class X {...};
typedef X Z; // (1)

ИЛИ

class Z {...}; // (2)

Я хочу иметь возможность в клиентском коде сделать это:

class Z; // Or something of this effect, sadly this fails in the case of (1)

И этот код не нужно менять независимо от того, является ли Z typedef или классом (который действительно должен быть прозрачным для клиента).

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

typedef создает другое имя для некоторого типа.Когда вы делаете

typedef X Z;

, вы говорите компилятору "Z - это другое имя для X".Если он не знает, что X в этот момент, эта информация довольно бесполезна.

Когда вы говорите

class X;

, компилятор, по крайней мере, знает, что X - это пользовательский тип,что полезноЗатем он может исключить, что X не относится к тем типам, которым может потребовать особой обработки, например void* или char.

C ++ 0x не изменит этого.

1 голос
/ 02 апреля 2011

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

Стандартная библиотека содержит один заголовок, состоящий из предварительных объявлений, <iosfwd>. Вы можете принять или адаптировать это соглашение, например "foo_forward.h".

Когда пользователь пишет в любом месте предварительную декларацию для вашего класса, он, по сути, пишет для вас ваш заголовок. Это несостоятельная договоренность.

...