为什么现代C++ IDE无法自动生成头文件?

23

我知道头文件提供的好处和灵活性,如符号发现、编译器加速等等。但我不明白为什么现代C++ IDE不会根据代码文件中添加的成员/方法自动生成头文件,从而减少手动维护头文件与代码文件的工作量,反之亦然。由于IDE只对头文件进行增量更改,开发人员可以修改头文件并保留更改。

重构可以提供添加/重命名/删除方法参数、重命名方法、将方法移动到另一个类等功能。在此类重构期间,IDE会负责更新头文件和源文件。

此功能类似于Visual Studio中的可视化表单设计器。当您设计一个表单时,IDE会自动生成代码,并将其存储在单独的、由IDE管理的源文件中。开发人员也可以修改这些代码文件或在用户管理的源文件中包含其他代码。

在处理专业C++源代码时,我遇到了各种可疑的做法:

  • 在头文件中定义整个类,包括函数代码(“为什么我要在两个地方定义一个类,我可以在一个地方定义它!”)

  • 在头文件中定义有用的函数(“为什么要费心维护头文件,当我可以直接定义函数在头文件中!如果其他开发人员不想查找头文件,让他们使用‘转到声明’!”)

  • 缺少公共/静态函数的头文件定义(减少编译时间?或者节省开发时间?)

虽然我不是专业的C++程序员,来自高级别的背景(JS、C#、AS3),但我亲身感受到了在C++中工作的“降级”,我认为IDE本身可以消除其中一些缺点。

我绝不是在嘲笑IDE或编译器。我知道C ++允许使用比现代语言(例如C#)更复杂的定义程序的方法,尽管模板的复杂性使我感到困惑,但我希望看到一些高级语言的好处带入C ++应用程序开发。


缺乏工具支持的基本观察是正确的。这是由于语言的复杂性所致。由于clang机制的变化,它似乎正在改变。也就是说,在这里关于为什么以某种方式完成某些事情的猜测是无效的。例如,大部分Boost库都是头文件库,有很好的理由。 - Cheers and hth. - Alf
1个回答

1
我相信你问题的前提是不正确的。
在定义头文件中的函数(或类成员函数)后,Eclipse Luna IDE可以自动生成实现存根(在CPP文件中)。
您可以在头文件中键入以下内容:
class MyClass 
{
  void my_method(const OtherClass& o, const std::string& name) const;
};

然后点击 "源代码 > 实现方法"。Eclipse会在CPP文件中正确地生成类似于以下内容的代码:
void MyClass::my_method(const OtherClass& o, const std::string& name) const
{
   // TODO: Auto-generated method stub.
}

我认为这个用例比“将成员/方法添加到代码文件中”然后“自动生成头文件”更加典型。这个想法是大多数开发者会先设计(创建)一个接口,然后开发一个实现(有时在CPP文件中)。
至于“头文件中定义的有用函数”,这是开发者希望编译器在许多翻译单位中内联他们的函数的常见做法。

9
大多数人希望相反的情况:例如从同一源代码中提取函数中的一个方法-> 我希望在头文件中自动生成该条目。 - Adam Hunyadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接