Я понимаю из ответа на вопрос Форвард объявляет 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 или классом (который действительно должен быть прозрачным для клиента).