在C++11中用可变模板参数可以消除重复,同时去掉参数个数的限制,代码很简洁:
template<typename T, typename... Args>
T* Instance(Args... args)
{
return new T(args...);
}
在上面的实现代码T* Instance(Args... args)中, Args是值拷贝的,存在性能损耗,可以通过完美转发来消除损耗,优化后的代码如下:
template<typename T, typename... Args>
T* Instance(Args&&... args)
{
return new T(std::forward<Args>(args)...);
}
测试代码如下:
struct A
{
A(int){}
};
struct B
{
B(int, double){}
};
A* pa Instance<A>(1);
B* pb Instance<B>(1, 2.3);
delete pb, pa;