在 C++ 中使用类的命名空间定义类的成员

Posted

技术标签:

【中文标题】在 C++ 中使用类的命名空间定义类的成员【英文标题】:Define members of a class using class's namespace in c++ 【发布时间】:2018-07-26 20:21:41 【问题描述】:

我很少有名称很长的类以及它们的成员函数。在 C++ 中,有一个技巧可以让您使用一个命名空间并声明函数:

namespace_name::foo();

并像这样定义它:

namespace namespace_name
    foo() 

为了代码的清晰,我想知道是否有类似的方法来替换函数的定义:

LongClassName::LongFunctionName() 

很抱歉,如果我使用了不当的词汇,但不知道如何描述问题。

【问题讨论】:

LongClassName son; /* son = show object name */ son.LongFunctionName(); 怎么样? “长”名称至少有一部分被缩短了。 using ShortName = LongName; 这可能就是你要找的东西:***.com/a/9864472/3292279 【参考方案1】:

在 C++ 中有一个技巧可以让你使用一个命名空间然后转

这个“技巧”允许你调用函数而不用命名空间指定完整的函数名。对于既不适用于命名空间也不适用于类的函数定义。对于命名空间级别的函数,您要么必须将该函数定义放在命名空间中,要么明确提及:

 namespace foo 
     void bar(); // foo::bar() declared
 

 // you can define it as this
 namespace foo 
     void bar() 


// or this
void foo::bar() 

// this does not work
using namespace foo;
void bar()  // ::bar() is defined here not foo::bar()

对于类方法定义 - 必须始终使用类名(可能还有命名空间),除非您在类本身内部定义它们(并隐式声明它们 inline):

class VeryLongName 
public:
    void method1() 
    void method2() 
;

【讨论】:

哦,我明白了。我纠正了问题中的错误。无论如何,它不适用于课程,对吧? 对于方法的权利,您必须明确说明每个方法属于哪个类,除非您在类主体中定义它们。

以上是关于在 C++ 中使用类的命名空间定义类的成员的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能创建在与类定义相同的命名空间中定义的 C++ 类的实例?

为啥我不能从不同命名空间中的朋友类更改类的私有成员?

类的成员和命名空间

C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性

namespace 命名空间

不同命名空间内的类的循环依赖 C++