为每个可变参数模板参数调用函数并将结果作为构造函数参数传递

时间:2015-06-08 15:27:46

标签: c++ c++11

所以我想生成一个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>());
        };
    }
};

1 个答案:

答案 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<?>()参数或其他。

我删除了intInstanciator位,因为一个唯一目的是生成构造函数的类并不需要那个噪声。使它成为一个可调用的无状态函数对象更具惯用性。