在stl容器中,为什么我们不能从类实例中访问类中的typedef?对此有什么特别的了解吗?
当value_type是模板参数时,如果不需要像vector :: value_type中那样指定模板参数,它可以帮助制作更通用的代码
示例:
class T {
public:
typedef int value_type;
value_type i;
};
T t;
T::value_type i; // ok
t.value_type i; // won't work
答案 0 :(得分:10)
答案是使用decltype
来获得课程。如,
decltype(t)::value_type
需要C ++ 11。
答案 1 :(得分:5)
因为typedef只是另一种类型的同义词。它不是一个对象(类的成员)。
正如@Neil Butterworth所说:“因为。运营商是会员访问运营商。”
答案 2 :(得分:0)
使用不同的运算符进行范围解析(::
)而不是成员访问(.
)是没有充分理由的,因为它从不含糊不清。这是一个烦恼,但它只是语言的方式。
虽然有些语言采用不同的方式......
.
代替::
,但在访问嵌套类型和静态成员时仍需要使用类名。.
,<instance>.<static nested type>
与<type>.<static nested type>
等效。