6
我正在写一个类(在头文件),需要下面的方法:正向声明中嵌套命名空间
static const foo::bar::clz* getSomething(void);
因为我不想污染与#include
我选择的头文件向前声明clz
:
namespace foo
{
namespace bar
{
class clz;
}
}
但是,这是相当笨拙了。在C++ 11中有这样一个可行的方法吗?沿
class foo::bar::clz;
东西线仍,如果你没有预见到它是否作为一个class
,struct
或union
实现的还要好。 C++ 11语法学家是否也覆盖了那个? (typename auto
可能是一个候选人,但我不是C++语法的专家)。
但是,当您向前声明一个对象为'struct'并在之后声明它为'class'时,您会受到警告。 –
@PaperBirdMaster诚然,编译器通常会对此提出警告。尽管如此,这是合法的,而不是(本身)是危险的。这个警告可能是合理的,因为“你确定你指的是你认为的你?”这是我愿意禁用的少数人之一。 – Angew
由于标准没有涉及到的问题,比如名称变形,至少在MSVC上,结构和类会发生不同的变形,所以如果你发现前向声明错误,你会得到链接错误 –