でアイテムを取得のstd ::タプルは、種類によって<code>std::tuple</code>項目を抽出するために、私は非常にきちんとして動作するコードを持っているC++ 11で継承されたタイプ
(私はこの機能を知っているようにさえ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'を持つためのユースケースは何ですか?あなたは、選択したいタプルに2つ以上の派生クラスを持つことを期待していますか? – AndyG
@AndyG A/Bの横に別の値を持つタプルの例です。 (2)私は1つのインターフェイスの2降下を使用しないことを約束します – Dewfy