这是用于构建给定类型对象的通用函数。感谢可变参数模板如果找到匹配的构造函数 T 将被构造,否则编译器将在编译时抛出错误。
template <typename T, typename... Args>
void * build(Args... args){
return new T(args...);
}
现在假设我不想传递 N 个参数,而是想从其他地方获取它们,例如从单例中获取它们,然后我必须以某种方式扩展 Arguments 并根据每个参数的类型调用一个方法:
class Singleton{
public:
template <typename T>
static T* getIstance(){
return reinterpret_cast<T*>(istances_map[typeid(T).has_code()]);
}
};
现在假设我打电话
MyClass * p = build<MyClass,Foo,Bar>();
我要做的是调用 MyClass Constructor,并从单例中获取 Foo 和 Bar 的相应实例。这应该是扩展模板代码的示例:
MyClass * p = new MyClass( Singleton::getIstance<Foo>(),
Singleton::getIstance<Bar>()
);
我觉得我需要一个递归模板和一个元组来解决这个问题。但这只是一种感觉。