Ошибка компилятора не имеет смысла (ошибка отсутствует параметр для функции) - PullRequest
2 голосов
/ 31 января 2011

Я получаю ошибку компилятора:

ошибка: нет соответствующей функции для вызова 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.

1 Ответ

1 голос
/ 31 января 2011

Полагаю, мораль этого вопроса заключается в том, чтобы не пытаться быть слишком навороченным ... так как это работает, просто вызывая boost :: bind с параметрами вместо пересылки их через отдельную функцию.* поэтому вместо этого:

toASCIITranslator temp = buildTansFunc<.....>(....);

просто сделайте звонок следующим образом:

toASCIITranslator temp = boost::bind(&Translator<std::string, forward_trans, short int, boost::function<EnumType(short int), EnumToStringTranslatorType&>, 
                         _1, 
                         boost::function<EnumType(short int)>(&enumChecker),
                         EnumToStringTranslator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...