C ++ извлечь аргумент из сигнатуры функции

Существует очень простой способ поймать любое исключение (деление на ноль, нарушение прав доступа и т. д.) в Visual Studio с помощью try -> catch (...). Достаточно небольшой настройки настроек проекта. Просто включите / EHa в настройках проекта. См. «Свойства проекта» -> C / C ++ -> Генерация кода -> Изменить исключения Enable C ++ на «Да с исключениями SEH». Вот и все!

См. Подробности здесь: http://msdn.microsoft.com/en-us/library/1deeycx5 (v = vs.80) .aspx

0
задан user2525536 1 March 2019 в 23:44
поделиться

1 ответ

Вам просто нужна специализация для обработки типа указателя на функцию:

template <typename Sig> struct argument_of;
template <typename R, typename Arg> struct argument_of<R(Arg)> { typedef Arg type; };
template <typename R, typename Arg> struct argument_of<R(*)(Arg)> { typedef Arg type; };

Это небольшое отличие, и я надеюсь, что я правильно понял терминологию, но символ bar - это не перегруженная функция типа void(int), тогда как переменная f (или неназванный параметр F) является указателем на функцию [ 1112] типа void(*)(int). Переменные и функции принципиально отличаются в C ++, и система типов имеет это различие.

Также стоит отметить, что другой вариант, для которого вы, возможно, захотите специализироваться, - это ссылка на функцию , которая будет выглядеть как void(&)(int). Тип ссылки на функцию может быть выведен в ситуациях, таких как decltype(*f) или decltype((bar)) (обратите внимание на дополнительные скобки).

0
ответ дан kmdreko 1 March 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: