所以我想生成一个lambda,它将通过从工厂中检索构造函数的参数来调用构造函数。
我想将现在可用的代码转换为可变参数模板,以便它可以使用任意数量的构造函数参数。
知道怎么做吗?
template <class Class>
struct Constructor
{
};
template <class Class>
struct Constructor< Class() >{
static std::function<Class*()> Instanciator(Factory& factory)
{
return []{
return new Class();
};
}
};
template <class Class, class Arg1>
struct Constructor< Class(Arg1) >{
static std::function<Class*()> Instanciator(Factory& factory)
{
return []{
return new Class(factory.Get<Arg1>());
};
}
};
template <class Class, class Arg1, class Arg2>
struct Constructor< Class(Arg1, Arg2) >{
static std::function<Class*()> Instanciator(Factory& factory)
{
return []{
return new Class(factory.Get<Arg1>(), factory.Get<Arg2>());
};
}
};
答案 0 :(得分:0)
return $http.get('http://example.com/get-token').then(function(response) {
return $http({
method: 'POST',
url: 'http://example.com/save-fruit',
headers: { 'X-CSRF-Token': response.data },
data: { fruit: fruit }
});
});
现在template <class Class>
struct Constructor
{};
template <class Class, class...Args>
struct Constructor< Class(Args...) > {
template<class Factory>
std::function<Class*()> operator()(Factory& factory)const
{
return []{
return new Class(factory.Get<Args>()...);
};
}
};
是Constructor< Foo(Args...) >
类型的函数对象,其中Factory -> std::function<Foo*()>
支持Factory
.Get<Args>()
。
我,我还希望在Args
调用中包含索引,以防你的类有两个.Get<?>()
参数或其他。
我删除了int
和Instanciator
位,因为一个唯一目的是生成构造函数的类并不需要那个噪声。使它成为一个可调用的无状态函数对象更具惯用性。