【发布时间】:2011-05-03 04:59:39
【问题描述】:
如果在 C++ 中我有一个类 longUnderstandableName。对于那个类,我有一个包含其方法声明的头文件。在类的源文件中,我必须写longUnderstandableName::MethodA,longUnderstandableName::MethodB等等,无处不在。
我能否以某种方式使用命名空间或其他东西,这样我就可以在类源文件中写入MethodA 和MethodB,并且只写在那里?
【问题讨论】:
-
截至目前,答案是否定的。 但是...存在a proposal to add
namespace classto the language,这将完全实现您和我想要的:在一个块中启用已声明的类成员的定义,该块将自动将它们限定为类 - 从而避免不断地重新输入类名范围、模板参数等。奇怪的是,它一直被采用到现在,这仍然只是在提案阶段,但我们到了。叹!我真的希望这可以使它成为 C++20 或其他任何东西。 -
@underscore_d 遗憾的是,该提案不包括
using class等效项,因此它仍然不能提供完全的灵活性。 -
@negamartin 您还在寻找什么?请举个例子。重点是
namespace class将为课程作者解决此重复问题,这是 OP 提出此问题的角度。同时,该课程的用户可以执行using tiny_type = SomeNamespace::SomeOtherNamespace::AHugeClassName;之类的操作。你还想要什么? -
@underscore_d 想象一个类中的枚举,
GiganticallyLongClassName::CONSTANT1、GiganticallyLongClassName::CONSTANT2等等。如果类是命名空间,我可以在函数using GiganticallyLongNamespaceName;中使用,但是因为这是一门课,我每次都必须输入GiganticallyLongClassName::CONSTANT1。使用using class指令,using class GiganticallyLongClassName;之类的指令会将其缩短为CONSTANT1、CONSTANT2等……我认为没有理由不将其包含在提案中。 -
@negamartin
I have to type GiganticallyLongClassName::CONSTANT1 every time.好吧,不是真的:正如许多其他人指出的那样(尽管我认为回答的问题与所问的问题不同......)你可以做到using g = GiganticallyLongClassName; g::CONSTANT1;- 但我明白你在说什么。我认为其他地方有关于您想要的using扩展类型的建议,我不确定 [ahem] 是否在namespace class的范围内。
标签: c++ oop class namespaces