6

C++ リファレンスを調べていると、

template <size_t I, class... Types>
typename tuple_element< I, tuple<Types...> >::type const& get(const tuple<Types...>& tpl) noexcept;

私が理解できないのは、戻り値の型です。どういうtypename tuple_element< I, tuple<Types...> >::type const&意味ですか?

私の解釈は、一般的な型への const 参照を返すということですが、以下のようなものtuple_element::typeだと思いますtuple_element::type

Class A{
  public:
      int B;
}
A::B = .........;

しかし、なぜそれをタイプとして使用できるのでしょうか? 私はそれを理解することはできません。

4

3 に答える 3

7

typeinはtypename tuple_element< I, tuple<Types...> >::type変数ではありません。別の型 ( tuple_element< I, tuple<Types...> >) 内の型です。

::クラスまたは名前空間内の変数または関数を参照する場合と同様に、別の型内の型を参照するには、スコープ解決演算子を使用します。

例:

namespace my_namespace {

    struct my_type {
        typedef int some_type;  // some_type here is an alias for int (both are types)
    };   

}

int main() {
    my_namespace::my_type::some_type some_variable;
}
于 2013-07-24T06:32:37.317 に答える
4

ここで、クラス メンバーは変数ではなく、クラスのスコープで定義された型です。簡単な例が必要な場合:

struct myClass
{
    typedef int myIntType;
};

あなたは書ける:

myClass::myIntType i = 3;
于 2013-07-24T06:34:22.953 に答える
2

tuple_element 参照から:

メンバーの種類:

type: the type of Ith element of the tuple, where I is in [0, sizeof...(Types))

可能な実装:

template< std::size_t I, class T >
struct tuple_element;
 
// recursive case
template< std::size_t I, class Head, class... Tail >
struct tuple_element<I, std::tuple<Head, Tail...>>
    : std::tuple_element<I-1, std::tuple<Tail...>> { };
 
// base case
template< class Head, class... Tail >
struct tuple_element<0, std::tuple<Head, Tail...>> {
   typedef Head type;
};
于 2013-07-24T06:32:28.337 に答える