【发布时间】:2020-02-25 19:20:46
【问题描述】:
简而言之:如何从给定类型的孩子创建可变元组?
在下面的代码中,get_children 调用中有错误的子类型。目标是接收来自给定元素的具有 Child 的元组。
template<typename T>
class Elem{
public:
T e;
class Child{ public: T c; };
Child child() { return Child{ .c = e}; };
};
template <typename... T>
class Collection{
public:
using arr = std::tuple<T...>;
arr elems;
using children = std::tuple<T...::Child>; /// **** HERE IS ERROR ***
auto get_children(){
children res;
get_child<sizeof...(T)-1>( res );
return res;
}
private:
template< size_t Num >
auto get_child( children &res ){
std::get<Num>(res) = std::get<Num>(elems).child();
get_child<Num-1>(res);
}
template<>
auto get_child<0>( children &res ){
std::get<0>(res) = std::get<0>(elems).child();
}
};
提前致谢!
【问题讨论】:
-
您的设计中有一些严重的object orgy...
-
这是一个理论问题。实际上 Child 将是另一个非模板类。
-
请注意包是
T,而不是T...——省略号不是其名称的一部分,而是用于扩展类型名称或表达式条款。
标签: c++ templates c++17 variadic