Max*_*xpm 1 c++ oop variadic-templates c++11
据我所知,一个假设的可变参数模板元组类必须使用带有模板参数的getter.
int MyInt = MyTuple.Get<int>(0);
Run Code Online (Sandbox Code Playgroud)
这是不方便的,并且引入了错误的可能性.我不禁觉得有一种方法来构建类,所以你不必明确指定它.
int MyInt = MyTuple.Get(0);
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是Get()成员函数返回另一个类,它自己计算出类型,可能是通过比较typeid(Foo).name()某些预先计算列表中的值.但是,这仍然必须在运行时之前发生,而且我无法想出在编译时迭代这样的事情的方法.
对于可变参数模板容器类(如元组),是否有任何方法可以使用不需要显式指定类型的getter?
你的意思是std::tuple?
getter的template参数指定成员的索引,而不是类型.根据定义,元组的数量和类型在编译时是固定的.由于类型取决于索引,并且必须在编译时知道类型,因此必须模板化getter.
template< typename ... types >
struct tuple;
template< typename head, typename ... tail_types >
struct tuple {
head value;
tuple< tail_types ... > tail;
};
template<>
struct tuple<> {};
template< typename tuple, size_t index >
struct tuple_element;
template< typename head, typename ... tail, size_t index >
struct tuple_element< tuple< head, tail ... >, index >
{ typedef typename tuple_element< tail ..., index - 1 >::type type; };
template< typename head, typename ... tail >
struct tuple_element< tuple< head, tail ... >, 0 >
{ typedef head type; };
template< size_t index, typename tuple >
typename std::enable_if< index != 0,
typename tuple_element< tuple, index >::type >::type
get( tuple const &t )
{ return get< index - 1 >( t.tail ); }
template< size_t index, typename tuple >
typename std::enable_if< index == 0,
typename tuple_element< tuple, index >::type >::type
get( tuple const &t )
{ return t.value; }
Run Code Online (Sandbox Code Playgroud)
等等
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |