синтаксис объявления typedef - PullRequest
2 голосов
/ 19 апреля 2010

Несколько дней назад я просмотрел источники повышения и нашел интересный typedef .

Есть код из "boost \ detail \ none_t.hpp":

namespace boost {

namespace detail {

struct none_helper{};

typedef int none_helper::*none_t ;

} // namespace detail

} // namespace boost

Я не видел подобного синтаксиса ранее и не могу объяснить смысл этого.

Этот typedef вводит имя none_t в качестве указателя на int в пространстве имен boost :: detail.

Что такое синтаксис?

А какая разница между " typedef int none_helper :: * none_t " и, например, " typedef int * none_t "?

Ответы [ 3 ]

3 голосов
/ 19 апреля 2010

Синтаксис для указателя на член - здесь это typedefs none_t в качестве указателя на int элемент данных none_helper.

Можно использовать синтаксис, например, таким образом:

 struct X { int i; };

 typedef int X::*PI;
 PI pi = &X::i;
 X* x = foo();
 x->*pi = 42;

InformIT имеет статью об указателях членов, содержащую более подробную информацию.

1 голос
/ 19 апреля 2010

none_t - указатель на переменную-член с типом int из none_helper.

struct none_helper
{
  int x1;
  int x2;
};

int none_helper::* ptm = &none_helper::x1;
^^^^^^^^^^^^^^^^^^
     none_t
1 голос
/ 19 апреля 2010
  • typedef int* none_t; вводит псевдоним типа для указателя на целое число.
  • typedef int non_helper::*none_t; вводит псевдоним типа для указателя на целочисленный член класса non_helper.
...