Как применить оператор sizeof () к нестатическим методам членов класса? - PullRequest
1 голос
/ 25 июля 2011
struct MyClass {
  int foo () { return 0; }
};

unsigned int size = sizeof(MyClass::foo);  // obviously error

Можем ли мы применить sizeof() к методам-членам из за пределами class? Нужно ли объявлять объект, чтобы получить его?

Редактировать : Я знаю, что приведенный выше код выдаст ошибку (вот почему слово «очевидно»). Хотел узнать, можем ли мы вообще применить sizeof () к методу-члену. Я не хочу описывать вариант использования для этого в длину.

Ответы [ 4 ]

6 голосов
/ 25 июля 2011

Невозможно получить размер функции-члена , но вы можете получить размер указателя на функцию-члена :

int size = sizeof( &MyClass::foo );

То же самое относится и к функциям, не являющимся членами (и статическим функциям-членам), размер функции не может быть получен.Это может вводить в заблуждение, потому что в большинстве случаев имя функции распадается автоматически в указатель на функцию в основном так же, как массив распадается на указатель на первый элемент, но, как и в случае массивов, sizeof не запускает затухание, а это, в свою очередь, означает, что вы должны явно запросить указатель.

1 голос
/ 25 июля 2011

Хотелось бы узнать, можем ли мы вообще найти метод sizeof () для члена.

Нет, потому что в языке C ++ такого понятия нет.Или размер любого вида функции.

1 голос
/ 25 июля 2011

Используйте

sizeof(int (MyClass::*)())

, поскольку вы берете "размер указателя на функцию из MyClass, который возвращает int и не принимает аргументов".

1 голос
/ 25 июля 2011

iirc это будет возвращать размер указателя на функцию в любом случае, так зачем это делать? Или я ошибаюсь?

Редактировать: я ошибся, это неверный код, событие, если функция была вне класса. Все, что вы можете сделать с помощью sizeof и function, это получить размер указателя на функцию (который вы должны сделать первым). Если вы хотите получить размер, занятый кодом функции, вам понадобится другой способ получить это.

Некоторое дальнейшее чтение: http://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.71).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...