Я пытаюсь написать функцию перевода, которая принимает значение и последовательность таблиц поиска в качестве аргументов.таблица поиска имеет следующее объявление:
template< typename fromType, typename toType> struct DataTranslator;
Я могу заставить его работать со следующими объявлениями функции шаблона перевода:
template< typename Return, typename Direction, typename ValType, typename TransType>
Return translate(ValType val, TransType& trans);
template< typename Return, typename Direction, typename ValType, typename TransType, typename... OtherTrans>
Return translate(ValType val, TransType& trans, OtherTrans&... others);
Затем я могу сделать что-то вроде следующего:1007 *
DataTranslator<specificBaud, universalBaud>::type baudTranslator;
DataTranslator<universalBaud, std::string>::type baudCmdTranslator;
specificBaud myBaud;
....
std::string result = translate<std::string, forward_trans>(myBaud, baudTranslator, baudCmdTranslator);
но если я изменю объявление моих функций перевода на:
template< typename Return, typename Direction, typename ValType, typename FT, typename TT>
Return translate(ValType val, typename DataTranslator<FT, TT>::type& trans);
template< typename Return, typename Direction, typename ValType, typename FT, typename TT, typename... OtherTrans>
Return translate(ValType val, typename DataTranslator<FT, TT>::type& trans, OtherTrans&... others);
, я получаю ошибку вызова не соответствующей функции при выполнении вызова перевода.Я использую GCC 4.5 для моего компилятора с флагом -std = c ++ 0x.
Мой главный вопрос: почему не работает вторая версия?Я видел примеры (в основном класс Tuple, выдвинутый в одном из предложений для шаблонов вариаций), где они выполняют такой тип декомпозиции типа, чтобы специализировать его.