4

在 c++ 中声明和实现类或结构时,我们通常会这样做:

H文件

namespace Space{
  class Something{
    void method();
  }
}

文件

void Space::Something::method(){
  //do stuff
}

或者

namespace Space{
  void Something::method(){
    //do stuff
  }
}

请注意如何将所有实现包装在命名空间块中,因此我们不需要在每个成员之前 编写Space:: 。有没有办法以类似的方式包装类成员?

请注意我想保持源文件和头文件分开。这通常是一个很好的做法。

4

4 回答 4

3

并非不牺牲头文件和实现 (cpp) 文件之间的分离。

您可以在类内的标头中内联声明所有内容,但对于大型类来说非常混乱。

你真正想要解决的问题是什么?还是只是打字时间?:)

于 2013-07-31T16:05:59.143 回答
2

是的:

.h文件:

namespace Space{
  class Something{
    void method()
    {
      // do stuff
    }
  };
}

不过我不推荐它。

于 2013-07-31T16:04:48.763 回答
1

如果您保留.cpp文件,则不能。

否则,你可以,但你基本上只是删除 .cpp 文件。

在您的 .h 文件中,您可以拥有:

namespace Space{
  class Something{
    void method()
    {
      //Method Logic
    }
  };
}

除了,如您所知,您可以在哪里包含标题会有限制。

我不太确定这会对您(OP)有所帮助,因为您似乎知道自己在做什么,但是我会将其包含在该问题的未来用户中:

.h 文件应该包含什么内容?

于 2013-07-31T16:10:01.307 回答
1

不,除非您将类成员直接放入类定义中

class Something
{
    void method() {}
};

不鼓励这样做,因为如果您的类定义在头文件中,它会导致头文件膨胀。

我自己不喜欢使用包装方法,所以每个函数体都明确地声明了它的命名空间。如果您删除原型,这有助于检测拼写错误或死代码。

于 2013-07-31T16:06:50.673 回答