【发布时间】:2011-10-06 12:56:47
【问题描述】:
我在两个不同的文件(A.cpp、A.h、B.cpp、B.h)中有同一个类的两个版本,在所有文件中,该类具有相同的名称但内部实现不同。
我的想法是从一个版本切换到另一个版本,只需在#include 处更改 .h 文件的名称,因此我不必更改代码中的任何其他内容(两个版本的方法具有相同的签名和相同的属性)
A.h 和 B.h 永远不会同时包含。
问题是无论我使用什么包含文件总是执行一个版本。我知道当我包含 B.h 时,至少它会被编译(通过放置一些代码错误,它们会在编译时显示)
这可以吗?或者这违反了 C++ 的一些规则?我认为这不应该违反一个定义规则,因为我没有同时使用 A.h 和 B.h。
【问题讨论】:
-
问题是如何链接目标文件?仅仅调整包含是行不通的。
-
如果你包含 B.h 并链接到 B.o,你应该没问题。你怎么链接?但是如果类的 api 是一致的,那么 A.h 和 B.h 应该是相同的;为什么它们不同?
-
你包含的头文件并不像你链接的实际代码那么重要。
-
你这样做很辛苦,我会定义一个抽象类并从中继承两个类。