通常情况下,如果我有一个Foo
或Bar
,我会做这样的事情:是否可以创建一个可用于创建任何类的“新”实例的泛型方法或类?
Foo* foo = new Foo();
Bar* bar = new Bar(2,3,5);
是否有使用模板或宏的方式,我可以构建一个功能,这样我可以这样做:
Foo* foo = MyAwesomeFunc(Foo);
Bar* bar = MyAwesomeFunc(Bar,2,3,5);
的
MyAwesomeFunc
的实际方法签名对我来说并不重要。
Foo
和Bar
不需要以任何可能的方式有关,并可能有完全不同的构造。此外,我可能要在将来支持任意数量的类,而不必实际修改代码MyAwesomeFunc
这可能吗?一个简单的办法是同时拥有Foo
和一些类型Bar
继承,说Baz
,并有重载方法返回一个Baz
,你投回到Foo
或Bar
...
Baz* MyAwesomeFunc(){
return new Foo();
}
Baz* MyAwesomeFunc(int a,int b,int c){
return new Bar(a,b,c);
}
但这里的问题是你会写:支持
- 为每个类的方法。
的目标,是写一个类,方法,或宏,在这里我们可以 调用一个函数(传递的任何参数),但调用传入的对象右侧 构造。这可能吗 ?
这个问题的目的是简单地探讨是否有可能在C++中做这样的事情。请不要提出共同的指针,独特的指针,使用新的缺陷,因为这是脱离主题。
编辑:我想只使用STL,并避免使用像升压....
查看'boost :: factory' – Ari0nhh
@Ar i0nhh谢谢阿里 - 任何方式轻松地做到这一点,而无需使用Boost? –
Pre C++ 11,“Perfect Forwarding”和“Variadic Templates”不存在。 'Boost'为社区提供了制作愚蠢强大代码的工具,'boost :: factory'是事实上的工厂,它被完美的转发和可变模板所取代。 – Gambit