感谢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个问题)。
答案 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 << ")";
}