2010-06-18 28 views
10

就像在stl容器中一样,为什么我们不能从类实例中访问类内的typedef?对此有特别的了解吗?访问来自实例的typedef


当VALUE_TYPE是一个模板参数,如果没有作为载体:: 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 

回答

5

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

而@Neil Butterworth提到:“因为。运算符是成员访问运算符。”

+0

因为。运算符是_member_访问运算符。 – 2010-06-18 09:45:09

+0

@Neil Butterworth:谢谢:) – sinek 2010-06-18 09:49:48

0

对于作用域分辨率(::),使用不同的运算符比成员访问(.)没有什么好理由,因为它从不含糊不清。这是一个烦恼,但它只是语言的方式。


一些语言做虽然不同......

  • C#使用.,而不是::,但你仍然需要使用类名访问嵌套类型和静态成员时。
  • D使用.<instance>.<static nested type>等同于<type>.<static nested type>
+0

这不只是不同的运营商。在该类型上调用'::',而在实例上调用'.'。但是,我仍然看不到没有使用相同的理由。 – 2010-06-18 10:04:53