【发布时间】:2013-09-23 03:46:24
【问题描述】:
我有一系列 C++ 类,我希望它们在功能上都相同,但在其他方面与继承无关。实际上,这些类只会在名称上有所不同。 (这些类将被抛出,我不希望某个基类的 catch 子句吞噬抛出的派生对象。将有派生类,但我希望创建离散的抛出类集就捕获块而言,始终是隔离的。)
当然,这样做的缺点是复制源代码。每当需要更改某些内容时,我不想更新同一代码的 N 个副本。
我已经通过#define 解决了代码重复问题。但我认为,如果我可以利用模板,它将有助于调试能力。模板中唯一参数化的就是类名本身。
我尝试了以下方法,但在 gcc 中不起作用(启用了 c++0x 支持):
template<typename ClassName>
class ClassName
{
public:
ClassName(int foo, float bar) { ... }
~ClassName() { ... }
bool SomePublicMethod() { ... }
private:
...
}
然后我会用类似的东西声明实际的类:
typedef ClassName<UnrelatedClass1> UnrelatedClass1;
typedef ClassName<UnrelatedClass2> UnrelatedClass2;
我已经知道上面的行不通了;我将它作为我想要完成的概念示例提供,并且想知道除了我目前使用的#define 宏方法之外是否有其他方法可以使它工作(它的调试能力降低了。 )
【问题讨论】: