构造可变元组的参数堆栈

时间:2015-12-17 15:20:58

标签: c++ tuples c++14 variadic-templates

我有一个包含可变元组的类,但需要自己构造参数堆栈。任何人都可以向我指出如何做到这一点?元组元素没有默认构造函数。

简化代码如下所示:

#include <tuple>

struct base {};

template<class T>
struct elem
{
    elem(base*){}
    elem() = delete;
};

template<class... ARGS>
struct foo : base
{
    foo() : t( /* initialize all elems with this */) {}
    std::tuple<elem<ARGS>...> t;
};


int main()
{
    foo<int, double> f;
}

2 个答案:

答案 0 :(得分:2)

您可以这样做:

template<class... ARGS>
struct foo : base
{
    foo() : t(elem<ARGS>(this)...) {}
    std::tuple<elem<ARGS>...> t;
};

答案 1 :(得分:1)

#include <tuple>

template <typename... ARGS>
struct foo : base
{
    foo() : t(get_this<ARGS>()...) {}

    template <typename>
    foo* get_this() { return this; }

    std::tuple<elem<ARGS>...> t;
};

DEMO