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

typeintypename 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 回答