在多个源文件上实现单个类(一个.h)有什么问题吗?我意识到这可能是单个类中代码太多的症状,但是它在技术上有什么问题吗?
例如:
foo.h中
class Foo
{
void Read();
void Write();
void Run();
}
Foo.Read.cpp
#include "Foo.h"
void Foo::Read()
{
}
Foo.Write.cpp
#include "Foo.h"
void Foo::Write()
{
}
Foo.Run.cpp
#include "Foo.h"
void Foo::Run()
{
}
答案 0 :(得分:15)
这很好。最后,它将全部链接在一起。
我甚至看过代码,其中每个成员函数都在不同的* .cpp文件中。
答案 1 :(得分:6)
这是合法的,它有一些(!?)优势......
如果将可执行文件与此类的静态库链接,则只会使用已使用的函数。这对于有限资源的系统非常方便。
您还可以隐藏某些功能的实现细节。两个人可能在不知道彼此的情况下实现类的一部分。方便国防部项目。
如果您查看任何CRT来源,您将看到相同的模式...
答案 2 :(得分:4)
不,技术上没有任何错误。链接器将把Foo的所有部分放在最终的二进制文件中。
答案 3 :(得分:2)
我一直在使用Apache Portable Runtime,它完全可以做到这一点。你有一个标题,比如apr_client.h
和该标题中函数的多个实现文件 - 每个文件代表客户端操作的一个方面。这没错,而且并不是很不寻常。
这可能是单个类中代码太多的症状
C ++不是Java,因此您不必根据类名选择文件名。
答案 4 :(得分:2)
完全有效。所有cpp文件都将链接在一起。
正如你所说,这对于使一个非常大的实现文件更具可读性非常有用,因为每个cpp文件都是一个编译单元,你可以(ab)使用这个事实。 (例如,未命名的命名空间)
答案 5 :(得分:0)
答案 6 :(得分:0)
有两点可能值得考虑。
全班优化:
如果编译器在解析文件时(假设单个TU编译器)可以看到所有成员函数,那么它可以在不同的成员函数之间执行优化。
代码审核
如果一个类的所有定义都在同一个TU中,那么这使得手动代码检查更容易。如果定义被分成不同的TU,这显着增加了手动审查所需的工作量,因为需要搜索适当的文件,在窗口之间不断点击以获得“整个”图片。