我正在寻找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&
意味着什么?
我的干涉是它返回一个常规类型tuple_element::type
的const引用,但我认为tuple_element::type
如下所示
Class A{
public:
int B;
}
A::B = .........;
但为什么它可以用作一种类型?我无法理解。
答案 0 :(得分:7)
type
中的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;
}
答案 1 :(得分:4)
这里,您的类成员不是变量,而是在类的范围内定义的类型。如果你想要一个简单的例子:
struct myClass
{
typedef int myIntType;
};
你可以写:
myClass::myIntType i = 3;
答案 2 :(得分:2)
来自tuple_element
reference:
会员类型:
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; };