从实例访问typedef

时间:2010-06-18 09:36:50

标签: c++ instance typedef

在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

3 个答案:

答案 0 :(得分:10)

答案是使用decltype来获得课程。如,

decltype(t)::value_type

需要C ++ 11。

参考:https://stackoverflow.com/a/13936644/577704

答案 1 :(得分:5)

因为typedef只是另一种类型的同义词。它不是一个对象(类的成员)。

正如@Neil Butterworth所说:“因为。运营商是会员访问运营商。”

答案 2 :(得分:0)

使用不同的运算符进行范围解析(::)而不是成员访问(.)是没有充分理由的,因为它从不含糊不清。这是一个烦恼,但它只是语言的方式。


虽然有些语言采用不同的方式......

  • C#使用.代替::,但在访问嵌套类型和静态成员时仍需要使用类名。
  • D使用.<instance>.<static nested type><type>.<static nested type>等效。