C ++替代类实现,通过使用其构造函数重命名类

时间:2015-12-08 05:13:40

标签: c++ design-patterns constructor typedef

根据this question,我无法将 typedef -ed typename用于构造函数。

在我当前的项目中,我必须以两种不同的方式实现一个类,可以通过简单地添加单个宏语句来改变它。代码看起来像这样

#ifdef USE_BAR
//declare class Bar in Bar.h and implement it in Bar.cpp
class Bar; 
typedef Bar Foo;
#else /* ~USE_BAR */
//declare class Foo in Foo.h and implement it in Foo.cpp
class Foo; 
#endif

BarFoo具有完全相同的方法,以及相同的构造函数重载列表。但是,使用此代码,我无法使用Foo* fooInstance = new Foo();行,因为USE_BAR的构造函数不会重命名为Bar。 我正在努力,因为我想在这些类的声明/实现之外只使用名为Foo的类,而不是Foo,而我还想区分这个Bar和{{1通过不同地命名它们来实现。

是否有任何代码设计模式可以实现这两种模式?

编辑:好像是VC ++问题。我实际上错误地引用了宏。我应该写的是Foo,而不是Bar

1 个答案:

答案 0 :(得分:0)

您引用的规则指出:

  

typedef-name不能用作构造函数声明的declarator-id中的类名。

这是关于声明构造函数,而不是调用它。那appears to work fine

如果由于某种原因没有,你可以随时#define Foo Bar