我收到编译错误:
错误:没有匹配函数来调用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&amp;)参数,因为其他所有内容都在其中。
我正在使用GCC 4.5.2作为编译器。
翻译功能的声明是:
template<typename RT, typename D, typename... Args>
RT Translator(Args... args)
{
return static_cast<RT>(translate<RT, D>(args...));
}
翻译功能可以在这个问题中找到: Translate
修改 更正了对buildTransFunction的调用以完成指定参数。
使用的g ++参数:-std = c ++ 0x。
答案 0 :(得分:1)
我猜这个问题的道德是不要试图过于花哨......因为这是有效的 通过参数清楚地调用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);