#c
#c
Вопрос:
Допустим, у нас есть следующие инструкции:
typedef itk::Image<double, 2> FloatImageType;
void CreateF(FloatImageType::Pointer image)
{
...
}
Я знаю, что ::
означает функция. Но в этом случае мы должны прочитать это следующим образом?
указатель класса является членом класса FloatImageType
Спасибо.
Комментарии:
1.
::
означает в области видимости, а не в функции.2. @40 два. Спасибо за ваш ответ. И, в данном случае, это означает, что у нас есть
Pointer
в областиFloatImageType
, которая указывает (ссылается) на изображение типаFloatImageType
. Правильно ли это таким образом?3. Наиболее вероятно,
Pointer
этоtypedef
в определении класса templateImage
. Я мало что могу вам сказать, если у меня нет определения класса templateImage
Ответ №1:
Зависит от того, что Pointer
есть на самом деле.
Случай 1:
namespace itk
{
template <class T, int X>
struct Image
{
typedef int Pointer;
};
}
Это называется «member 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. Я полагаю, мы можем сузить круг поиска, ознакомившись с документацией itk. Быстрый поиск не позволил мне найти надлежащую ссылку на документацию. itk.org/ItkSoftwareGuide
2. Случай 3 не имеет значения, в данном случае
Pointer
не определяет тип. Таким образом, он не может указать тип входного аргумента функцииvoid CreateF(FloatImageType::Pointer image)
.3. @40two: Вы правы, но из вопроса неясно, действительно ли OP пытался это сделать (столкнувшись с ошибкой компилятора).
Ответ №2:
Но в этом случае мы должны прочитать это следующим образом? указатель класса является членом класса FloatImageType
Нет, компилятору она читается следующим образом:
Я ожидаю экземпляр типа,
Pointer
определенного вFloatImageType
классе template (без указания параметров шаблона, поэтому меня устраивает любой).
Мне не нужен экземпляр какого-то типа, который вызывается (возможно, случайно)Pointer
и который, возможно, существует в глобальном пространстве имен, или тот, который вы извлекаете откуда-то еще, мне все равно. Я явно запрашиваю то, которое принадлежитFloatImageType
, ничего другого.
(Также необходимо явно разрешить тип Pointer
как член FloatImageType
, поскольку он находится внутри определения класса (или шаблонного класса, как это бывает) и в противном случае не был бы видимым или «известным».)