如何使用不同的模板参数作为参数包传递相同的结构

时间:2017-01-11 08:43:54

标签: c++ templates tuples constexpr

感谢SO们,我解决了我的一个问题: Create a tuple with variatic type wrapped

但在那之后我意识到,我仍然有一个我无法解决的问题。 所以现在我有:

template < typename T,
           size_t Size >
struct Metadata {

  using type = T;

  std::bitset<Size>  bitset;
};

template <class... Ts>
constexpr auto make_metadata()
{
    constexpr size_t N = sizeof...(Ts);
    return std::make_tuple(Metadata<Ts, N>{0}...);
}

我打算使用它&#34;喜欢&#34;那个:

constexpr auto result = make_metadata<Foo1, Foo2, Foo3>({0}, {0}, {0});

根据Jarod42评论,我认为我需要2个功能。

但是我如何将参数传递给函数然后传递给元组?

我想知道怎么做但是没有用力来传递每个Ts 的每个参数,如果它们不存在我只会设置一个默认值( 2个问题)。

1 个答案:

答案 0 :(得分:1)

这可能是你想要的,我不确定。 (因为你永远不会显示要使用的参数的位置)

#include <tuple>
#include <bitset>
#include <iostream>

struct A{int value;};
struct B{int value;};
struct C{int value;};

template <typename T,int Size>
struct Metadata{
  using type = T;
  T value;
  std::bitset<Size> bitset;
};

template <typename...Ts,typename...Args>
constexpr auto make_metadata(Args... args)
{
    constexpr auto N = sizeof...(Ts);
    return std::make_tuple(Metadata<Ts, N>{args,0}...);
}

int main(){
   auto data = make_metadata<A,B,C>(1,2,3);
   std::cout << "(" << std::get<0>(data).value.value 
             << ", " << std::get<1>(data).value.value
             << ", " << std::get<2>(data).value.value << ")";
}