получение типа, возвращаемого функцией, используя оператор "typeof" в gcc - PullRequest
4 голосов
/ 09 ноября 2009

Мы можем получить тип, возвращаемый функцией в gcc, используя оператор typeof следующим образом:

typeof(container.begin()) i;

Можно ли сделать что-то подобное для функций, принимающих некоторые аргументы, но не приводящих их? Например. когда у нас есть функция:

MyType foo(int, char, bool, int);

Я хочу получить этот «MyType» (возможно, с использованием оператора typeof), если я знаю только имя функции («foo») и не знаю, какие аргументы он принимает. Возможно ли это?

Ответы [ 3 ]

5 голосов
/ 09 ноября 2009

typeof - нестандартное расширение, поэтому не используйте его, если хотите, чтобы ваш код был переносимым.

Его синтаксис typeof(expression), поэтому вам нужно дать ему выражение, вызывающее функцию (тип которой поэтому MyType), например:

typeof(foo(int(),char(),bool(),int()))
5 голосов
/ 09 ноября 2009

В C ++ тип возвращаемого значения не является частью сигнатуры метода. Даже если есть способ получить тип возвращаемого значения метода, вам придется иметь дело с возможностью возврата нескольких методов и не зная, какой из них имеет тип возвращаемого значения, который вы хотите.

0 голосов
/ 09 ноября 2009

C ++ 0x вводит вывод типа с использованием ключевых слов decltype и auto.
В C ++ вы можете использовать typeof (как предложил Майк Сеймур) или принцип SFINAE.

...