我们怎样才能阅读以下陈述?

时间:2014-07-06 15:28:22

标签: c++

说我们有以下声明:

typedef itk::Image<double, 2>  FloatImageType;

void CreateF(FloatImageType::Pointer image)
{
...
}

我知道::在函数中的含义。但是,在这种情况下,我们是按照以下方式阅读的吗?

class Pointer是FloatImageType类

的成员

感谢。

2 个答案:

答案 0 :(得分:2)

取决于Pointer实际上是什么。

案例1:

namespace itk
{
    template <class T, int X>
    struct Image
    {
        typedef int Pointer;
    };
}

这称为“成员typedef”。

案例2:

namespace itk
{
    template <class T, int X>
    struct Image
    {
        struct Pointer
        {
        };
    };
}

这称为“嵌套类”。

案例3:

namespace itk
{
    template <class T, int X>
    struct Image
    {
        static int const Pointer = 0;
    };
}

这显然不是一个类型,只是一个静态成员变量。

答案 1 :(得分:0)

  

但是,在这种情况下,我们是否按如下方式阅读?   class Pointer是FloatImageType类的成员

不,它对编译器的描述如下:

  

我希望在Pointer模板类中定义FloatImageType类型的实例(不知道哪些模板参数,所以我对任何模板参数都没问题。)
  我想要某个类型的实例(可能是偶然的)被称为Pointer并且可能存在于全局命名空间中,或者是你从其他地方撤出的实例,我不是&# 39;关心。我明确地请求属于FloatImageType的,没有什么不同。

(还有必要明确地将Pointer的类型解析为FloatImageType的成员,因为它位于类定义(或模板类中,因为它发生)中并且不会否则是可见的或者#34;已知&#34;。)