Ich bin eine Klasse zu schreiben (in einer Header-Datei), die die folgende Methode erfordert:erklären nach vorne in verschachtelten Namespace
static const foo::bar::clz* getSomething(void);
Da will ich nicht die Header-Datei mit einem #include
verschmutzen ich wählen zu vorwärts erklärenclz
:
namespace foo
{
namespace bar
{
class clz;
}
}
Aber das ist eher zu plump. Gibt es eine bessere Möglichkeit, dies in C++ 11 zu tun? Etwas nach dem Vorbild von
class foo::bar::clz;
Es wäre schöner noch, wenn Sie nicht, ob oder nicht haben, um es vorwegzunehmen als class
, struct
oder union
umgesetzt wird. Haben die C++ 11-Grammatiker das auch abgedeckt? (typename auto
könnte ein Kandidat sein, aber ich bin kein Experte in C++ Grammatik).
Aber Sie werden mit einer Warnung gewarnt, wenn Sie ein Objekt als "struct" weiterleiten und es als "Klasse" deklarieren. –
@PaperBirdMaster True, Compiler warnen normalerweise davor. Trotzdem ist es legal und nicht (an sich) gefährlich. Die Warnung wird wahrscheinlich als "Sind Sie sicher, dass Sie sich auf das beziehen, was Sie denken, dass Sie sind?" Gerechtfertigt? Es ist einer der wenigen, die ich deaktivieren würde. – Angew
Es kann gefährlich sein, aufgrund von Problemen, die nicht durch den Standard abgedeckt werden, wie Name Mangling ... zumindest auf MSVC struct und class werden anders gemangelt, so erhalten Sie Linker Fehler, wenn Sie die Vorwärtsdeklaration falsch bekommen –