【发布时间】:2015-11-30 13:33:29
【问题描述】:
在 c++11 中,我有非常简洁且有效的代码,用于按类型提取 std::tuple 项目(据我所知,这个功能甚至 placed 到 c++14 stl)
现在我面临着通过继承的类规范选择项目的任务
struct A
{
int a;
};
struct B : public A
{
int b;
};
...
auto tval = std::make_tuple(1, B());
//now I would like to reference items as following:
tuple_ref_by_inheritance<A>(tval).a = 5; //Access to B instance by parent A
以下代码是我的不成功尝试:
template< class T, class Tuple >
struct tuple_ref_index;
// recursive case
template<class T, class Head, class... Tail >
struct tuple_ref_index<T, std::tuple<Head, Tail...> >
{
enum { value = tuple_ref_index<T, std::tuple<Tail...>>::value + 1 };
};
template<class T, class Head, class... Tail >
struct tuple_ref_index<T, std::tuple<Head, Tail...> >
{
const static typename std::enable_if<
std::is_same<T, Head>::value>::type* _= nullptr;
enum { value = 0 };
};
template <class T, class Tuple>
inline T& tuple_ref_by_inheritance(Tuple& tuple)
{
return std::get< tuple_ref_index<T, Tuple>::value >(tuple);
}
【问题讨论】:
-
拥有
1的用例是什么?您是否预计要从中选择的元组中有多个派生类? -
@AndyG 只是元组的一个例子,它在 A/B 之外还有另一个值。 (2) 我保证不使用一个界面的 2 降序
标签: c++ c++11 tuples template-meta-programming