gpt4 book ai didi

c++ - 编译器错误没有意义(错误是缺少函数参数)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:41 25 4
gpt4 key购买 nike

我收到一个编译器错误:

错误:没有匹配函数来调用 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。

Translator 函数的声明是:

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。

最佳答案

我想这个问题的寓意是不要试图太花哨......因为这有效直接使用参数调用 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);

关于c++ - 编译器错误没有意义(错误是缺少函数参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com