类方法内联定义

Class method inline definitions

本文关键字:定义 类方法      更新时间:2023-10-16

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

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

而不是

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

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

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

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

仅仅在头文件中包含结构/类定义会导致头文件相互递归的问题,除非显式地将声明放在另一个头文件中。

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

你在做什么叫做前向声明

您将无法在所有其他翻译单元中使用该类做任何事情(例如调用方法,创建实例),除了一个.cpp文件,您在其中定义了它。所以,这个想法是完全无用和糟糕的。你会得到一大堆链接器错误。

所以,你要么坚持样式#2。或者在头文件中定义内联方法,如

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