указатель на функцию с списком аргументов переменной - PullRequest
6 голосов
/ 08 сентября 2011

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

template<typename T>
map<T, T (*)(T, ...)> func_map;

Если это возможно, можете ли вы сказать, что это будет правильным решением с точки зрения дизайна.


[Редактировать] На самом деле у меня есть набор алгоритмических функций, и у меня есть поле сообщения.Мне нужно выбрать эту алгоритмическую функцию на основе нескольких значений байтов на этом сообщении.Я думал использовать hash_map со значением ключа относительно указателя на эту алгоритмическую функцию.я хотел быть очень быстрым по производительности, что может быть лучшим способом реализовать это.

Кроме того, причина, по которой я не выбираю для этого простой if-else или блок переключателей, заключается в том, что значение, которое говорит нам о функции, которую необходимо выполнить, может ссылаться на какую-то другую функцию в более поздний момент.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Да, это возможно, но, вероятно, не следует. Существует ряд проблем с функциями variadic, в том числе:

  • Все передаваемые типы должны быть POD-типами, или поведение не определено
  • Нет никакой безопасности типов. Если вы передадите неправильный тип, вы вызовете неопределенное поведение.

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

0 голосов
/ 08 сентября 2011

Лично я считаю переменные списки аргументов плохой идеей. Он не позволяет вам использовать компилятор для проверки типов и, следовательно, облегчает поиск ошибок до создания какого-либо объектного кода.

Поэтому я бы порекомендовал вам найти способ обойти это.

...