我发现它是一个非常吸引人的编程风格,它在结构中直接内联定义结构/类的所有方法,例如,只用这种方式定义结构:
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 ++实现呢?
答案 0 :(得分:0)
你在做什么叫做前瞻声明。
您将无法在所有其他翻译单元中使用此类执行任何操作(例如,调用方法,创建实例),除了一个.cpp文件,您可以在其中定义它。所以,这个想法完全没用,也很糟糕。而且你会得到一大堆链接器错误。
所以,你需要坚持风格#2。或者在头文件中定义内联方法,比如
struct A {
A() {} // something
int func() { /* function body */
}