2010-04-19 2 views
2

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

Существует код от «повышающего \ подробно \ 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 namespace.

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

А какая разница между "ЬурейеГо INT none_helper :: * none_t" и, например, "ЬурейеГо междунар * none_t"?

+1

Возможный дубликат http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member –

ответ

3

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

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

struct X { int i; }; 

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

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

1
  • typedef int* none_t; вводит псевдоним типа для указателя на целое число.
  • typedef int non_helper::*none_t; вводит псевдоним типа для указателя на целочисленный член класса non_helper.
1

none_t представляет собой указатель на переменную члена с типом int из none_helper.

struct none_helper 
{ 
    int x1; 
    int x2; 
}; 

int none_helper::* ptm = &none_helper::x1; 
^^^^^^^^^^^^^^^^^^ 
    none_t 
Смежные вопросы