我有一系列C++类,我希望它们在功能上都是相同的,但除此之外没有关系。实际上,这些类只会在名称上有所不同。 (这些类将被抛出,并且我不希望某个基类的catch子句吞噬抛出的派生对象。将是派生类,但是我希望创建离散的抛出类集合,它们总是被隔离的就像catch块一样。)使用模板准确地克隆类类型?
当然,这个缺点是复制源代码。无论何时需要更改,我都不想更新相同代码的N份副本。
我已经通过#define解决了代码重复问题。但是我认为如果我可以利用模板,它将有助于调试能力。在模板中参数化的唯一东西就是类名称本身。
我尝试以下,这并没有在GCC工作(启用W/C++ 0x中支持):
typedef ClassName<UnrelatedClass1> UnrelatedClass1;
typedef ClassName<UnrelatedClass2> UnrelatedClass2;
:
template<typename ClassName>
class ClassName
{
public:
ClassName(int foo, float bar) { ... }
~ClassName() { ... }
bool SomePublicMethod() { ... }
private:
...
}
然后,我会用的东西类似于申报实际班
我已经知道上述不起作用;我将它作为我想要完成的概念性示例提供,并且想知道是否有一种方法可以使其工作,除了我正在使用的#define宏方法(它具有减弱的调试能力)之外。 )
或者更好的是,使用空类的标签:这种方式,您不必担心关于标签分配或冲突,并可能使用有意义的名称。 'template class ClassName {...}; struct SomeTag {}; typedef ClassName UnrelatedClass1;' –
@IgorTandetnik,更好的是,'typedef ClassName UnrelatedClass1;':) –
chris
@chris:是的,我想了一下,当我发送该评论(自删除后) 。 –