uli*_*ess 0 c++ namespaces code-formatting
当我MyClass在命名空间中有一个 C++ 类时mynamespace,我将它的方法实现为
void mynamespace::MyClass::method() { … }
Run Code Online (Sandbox Code Playgroud)
我可以将其包装在命名空间中以将各个定义缩短为
namespace mynamespace {
void MyClass::method() { ... }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法避免重新输入MyClass::,以便我可以{在签名更改时更轻松地将 之前的所有内容复制到标题作为原型,而不必MyClass::每次都删除?
我想“一个类也是一个命名空间,也许我可以做到”
namespace mynamespace::MyClass {
void method() { ... }
}
Run Code Online (Sandbox Code Playgroud)
但这抱怨我将 MyClass 重新定义为不同的东西。using mynamespace::MyClass;也不起作用(但无论如何都会很糟糕,因为如果它起作用,我将如何在该文件中该行下方的任何位置声明一个独立函数)。
是否有解决方案,或者在 C++ 中根本不可能?
不,限定的类名必须出现在类定义之外定义的任何类成员上。(并且只能有一个类定义,通常在头文件中。)
C++ 标准在[class.mfct]/4 中阐明了这个规则:
如果成员函数的定义在词法上超出其类定义,则成员函数名称应使用
?::? 操作员。
同样在[class.static.data]/2 中用于静态数据成员。
您可以使用预处理器宏来缩写此限定,但这会严重损害可读性并且不是一种常见做法。
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |