根据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
Bar
和Foo
具有完全相同的方法,以及相同的构造函数重载列表。但是,使用此代码,我无法使用Foo* fooInstance = new Foo();
行,因为USE_BAR
的构造函数不会重命名为Bar
。
我正在努力,因为我想在这些类的声明/实现之外只使用名为Foo
的类,而不是Foo
,而我还想区分这个Bar
和{{1通过不同地命名它们来实现。
是否有任何代码设计模式可以实现这两种模式?
编辑:好像是VC ++问题。我实际上错误地引用了宏。我应该写的是Foo
,而不是Bar
。
答案 0 :(得分:0)
您引用的规则指出:
typedef-name不能用作构造函数声明的declarator-id中的类名。
这是关于声明构造函数,而不是调用它。那appears to work fine。
如果由于某种原因没有,你可以随时#define Foo Bar
。