Я получаю ошибку компилятора:
ошибка: нет соответствующей функции для вызова buildTransFunc(<unresloved overloaded function type>, boost::function<EnumType(short int)>, EnumTypeToStringTranslator&)
Объявление для buildTransFunc выглядит следующим образом:
template<typename RT, typename func, typename... Args>
RT buildTransFunc(func f, Args... args)
{
return RT(boost::bind(f, _1, args...));
}
Я называю вышесказанное следующим образом:
typedef boost::function<std::string (short int)> toASCIITranslator;
toASCIITranslator temp = buildTransFunction<toASCIITranslator, std::string (*) (short int, boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType&), boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType& >
(&Translator<std::string, forward_trans, short int, boost::function<EnumType (short int)>, EnumTypeToStringTranslatorType>, boost::function<EnumType(short int)(&enumChecker), EnumTypeToStringTranslator);
Сообщение об ошибке, кажется, пропускает параметр std :: string (*) (short int, boost :: function, EnumTypeToStringTranslatorType &) в сообщении об ошибке, так как все остальное там.
Я использую GCC 4.5.2 для компилятора.
Объявление для функции переводчика:
template<typename RT, typename D, typename... Args>
RT Translator(Args... args)
{
return static_cast<RT>(translate<RT, D>(args...));
}
Функции перевода можно найти в этом вопросе:
Перевести
EDIT
исправлен вызов buildTransFunction для завершения задания параметров.
g ++ используемые аргументы: -std = c ++ 0x.