类方法内联定义

时间:2016-11-17 19:04:11

标签: c++ c++11

我发现它是一个非常吸引人的编程风格,它在结构中直接内联定义结构/类的所有方法,例如,只用这种方式定义结构:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .classpath
    new file:   .ignore
    new file:   .project
    new file:   .settings/org.eclipse.core.resources.prefs
    new file:   .settings/org.eclipse.jdt.core.prefs
    new file:   .settings/org.eclipse.m2e.core.prefs

而不是

"A.hpp"
class A;

"A.cpp"
class A
{
    A() = default;
    void method() { }
};

这意味着将类/结构定义放在代码文件中,并且只在头文件中包含声明。

但是,当编译器需要知道其他代码文件中的struct / class布局时,这会遇到问题。

是否有支持此功能的编程风格?也许只有通过getter / setter来获取和设置字段?然而,这种方式会导致大量的样板。

只是在头文件中包含struct / class定义会导致相互递归的头文件出现问题,除非将声明明确地放在另一个头文件中。

我可以用D语言在模块系统中实现这种编程风格,但是如何用C ++实现呢?

1 个答案:

答案 0 :(得分:0)

你在做什么叫做前瞻声明。

您将无法在所有其他翻译单元中使用此类执行任何操作(例如,调用方法,创建实例),除了一个.cpp文件,您可以在其中定义它。所以,这个想法完全没用,也很糟糕。而且你会得到一大堆链接器错误。

所以,你需要坚持风格#2。或者在头文件中定义内联方法,比如

struct A {
    A() {} // something
    int func() { /* function body */
}