在嵌套命名空间中转发声明

Bat*_*eba 6 c++ c++11

我正在写一个类(在头文件中),需要以下方法:

static const foo::bar::clz* getSomething(void);
Run Code Online (Sandbox Code Playgroud)

因为我不想用#include我选择转发声明 来污染头文件clz:

namespace foo
{
    namespace bar
    {
        class clz;
    }
}
Run Code Online (Sandbox Code Playgroud)

但那也很笨拙.在C++ 11中有没有可行的方法呢?有点像

class foo::bar::clz;
Run Code Online (Sandbox Code Playgroud)

如果你不必预测它是否被实现为class,struct或者更好,那将会更好union.还有那个C++ 11语法学家吗?(typename auto可能是候选人,但我不是C++语法专家).

Rei*_*ica 5

无法避免嵌套的命名空间.

至于classvs. structvs. union,部分:classstruct可以互换使用.如果是a union,则必须如此声明.