2010-09-12 2 views
1

У меня есть unordered_map функций, которые должны вызываться объектом при анализе XML-файла.
Я обнаружил, что boost :: function имеет базовый класс с именем boost :: function_base, однако, как и ожидалось, я не могу его вызывать, потому что у меня нет знака функции.
Поскольку все эти функции являются функциями setter, я могу гарантировать, что они вернут void и будут иметь только один параметр неизвестного типа.
Есть ли лучший способ разрешить другой тип, а затем ветку if-else-if, которую я пытаюсь избежать?Вызов boost :: function через boost :: function_base

ответ

2

Использовать boost :: variant - лучший способ пойти. Как вы могли бы вызвать функцию с неизвестным типом параметра?

+0

+1 i второй, что. Вариант знает, какой тип хранится, поэтому он может избежать ветки if-else-if. –

+0

@Johannes Schaub - litb: Но тогда как я могу просто вызвать функцию? Мне все еще нужно знать тип, который я решаю. –

+0

@the_drow посмотреть на посещение. В руководстве boost.variant есть информация об этом. –

0

boost::function предназначен только для полиморфизма времени компиляции. Почему бы вам просто не использовать обычный указатель функции? То есть

typedef void (*function_type)(void *);