boost::函数参数定义不起作用
boost::function parameter definition not working
我创建了两个特殊类型,我想在应用程序中的get_property_function.hpp中使用它们:
typedef boost::function<std::string ()> GetFunction;
typedef map<std::string, GetFunction> PropertyToGetFunction;
typedef boost::function<std::string (LPARAM)> GetEventFunction;
typedef map<std::string, GetEventFunction> PropertyToGetEventFunction;
我在我的 PropertyManager.hpp 中定义了以下行:
PropertyToGetFunction create_get_map();
PropertyToGetEventFunction create_event_get_map();
PropertyToGetFunction property2getFunction;
PropertyToGetEventFunction property2getEventFunction;
我在我的物业管理器中实现它们.cpp:
PropertyToGetFunction PropertyManager::create_get_map()
{
PropertyToGetFunction property2getFunction;
property2getFunction[string("1.1.3.4.1.1")]=&getReceiptPrinter_DeviceCapability;
...
return property2getFunction;
}
PropertyToGetEventFunction PropertyManager::create_event_get_map()
{
PropertyToGetEventFunction property2getEventFunction;
property2getEventFunction[string("105")]=&getPTRRetractBinThreshold_UserEvent;
...
return property2getEventFunction;
}
我分配给地图的方法在 get_property_function
中定义。
get_property_function.hpp:
...
std::string getPTRRetractBinThreshold_UserEvent(LPARAM lParam);
...
get_property_function.cpp:
...
std::string getPTRRetractBinThreshold_UserEvent(LPARAM lParam)
{
string result = "";
//I will do some process in here and will save it in result var.
return result;
}
...
我使用getPropertyValue
在我的地图中找到正确的方法:
string PropertyManager::getPropertyValue(string property_id)
{
string result_value = "No Property Found";
if (!isReadable(property_id))
{
return "Error";
}
else
{
PropertyToGetFunction::const_iterator it =property2getFunction.find(property_id);
if ( it != property2getFunction.end() )
{
GetFunction function = it->second;
result_value = function();
}
}
return result_value;
}
string PropertyManager::getPropertyValue(string property_id, LPARAM lParam)
{
string result_value = "No Property Found";
if (!isReadable(property_id))
{
return "Error";
}
else
{
PropertyToGetEventFunction::const_iterator it = property2getEventFunction.find(property_id);
if ( it != property2getEventFunction.end() )
{
GetEventFunction function = it->second;
result_value = function(lParam);
}
}
return result_value;
}
getPropertyValue(string property_id)
工作正常,我没有问题,但getPropertyValue(string property_id, LPARAM lParam)
会导致编译错误:
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(1144): could be 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(1146): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char &)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(1148): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char *)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(1150): or 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,unsigned char &)' [found using argument-dependent lookup]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(155): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_istream<_Elem,_Traits> &(__cdecl *)(std::basic_istream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(161): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(168): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::ios_base &(__cdecl *)(std::ios_base &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(175): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::_Bool &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(194): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(short &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(228): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned short &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(247): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(int &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(273): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned int &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(291): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(309): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__w64 unsigned long &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(329): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(__int64 &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(348): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(unsigned __int64 &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(367): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(float &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(386): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(double &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(404): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(long double &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(422): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(void *&)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:Program FilesMicrosoft Visual Studio 9.0VCincludeistream(441): or 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator >>(std::basic_streambuf<_Elem,_Traits> *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> while trying to match the argument list '(std::basic_istream<_Elem,_Traits>, LPWORD )'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> D:programmingagentcompiled4vs2008boost_v1.50.0includeboost-1_50boost/property_tree/stream_translator.hpp(35) : while compiling class template member function 'void boost::property_tree::customize_stream<Ch,Traits,E>::extract(std::basic_istream<_Elem,_Traits> &,E &)'
1> with
1> [
1> Ch=char,
1> Traits=std::char_traits<char>,
1> E=LPWORD ,
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> D:programmingagentcompiled4vs2008boost_v1.50.0includeboost-1_50boost/property_tree/stream_translator.hpp(190) : see reference to class template instantiation 'boost::property_tree::customize_stream<Ch,Traits,E>' being compiled
1> with
1> [
1> Ch=char,
1> Traits=std::char_traits<char>,
1> E=LPWORD
1> ]
1> D:programmingagentcompiled4vs2008boost_v1.50.0includeboost-1_50boost/property_tree/stream_translator.hpp(186) : while compiling class template member function 'boost::optional<T> boost::property_tree::stream_translator<Ch,Traits,Alloc,E>::get_value(const std::basic_string<_Elem,_Traits,_Ax> &)'
1> with
1> [
1> T=LPWORD ,
1> Ch=char,
1> Traits=std::char_traits<char>,
1> Alloc=std::allocator<char>,
1> E=LPWORD ,
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> D:programmingagentcompiled4vs2008boost_v1.50.0includeboost-1_50boost/property_tree/detail/ptree_implementation.hpp(661) : see reference to class template instantiation 'boost::property_tree::stream_translator<Ch,Traits,Alloc,E>' being compiled
1> with
1> [
1> Ch=char,
1> Traits=std::char_traits<char>,
1> Alloc=std::allocator<char>,
1> E=LPWORD
1> ]
1> D:programmingagentcompiled4vs2008boost_v1.50.0includeboost-1_50boost/property_tree/detail/ptree_implementation.hpp(732) : see reference to function template instantiation 'Type boost::property_tree::basic_ptree<Key,Data>::get_value<Type>(void) const' being compiled
1> with
1> [
1> Type=LPWORD,
1> Key=std::string,
1> Data=std::string
1> ]
1> ..............Source-CodeDevice-Managersourcepropertyget_property_functions.cpp(3328) : see reference to function template instantiation 'Type boost::property_tree::basic_ptree<Key,Data>::get<LPWORD>(const boost::property_tree::string_path<String,Translator> &) const' being compiled
1> with
1> [
1> Type=LPWORD,
1> Key=std::string,
1> Data=std::string,
1> String=std::string,
1> Translator=boost::property_tree::id_translator<std::string>
1> ]
我确定我的参数定义有问题 boost::function
.你能告诉我我做错了什么吗?
在以下行中:
property2getFunction[string("105")] = &getPTRRetractBinThreshold_UserEvent
尝试将具有string(LPARAM)
签名的函数分配给具有string(void)
签名的boost::function
(请参阅您的GetFunction
类型(。这就是您收到此编译错误的原因。
您可能打算改用property2getEventFunction
。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 双链表的自定义实现不起作用(教育)
- C++结构模板变量快捷方式定义不起作用
- set_interaction自定义矢量不起作用的示例
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- For 和 while 循环在全局定义的函数中不起作用
- 任务计划程序库的预处理不起作用 - 多定义错误
- C 自定义比较器不起作用
- std::sort 在我的自定义迭代器上不起作用
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 带有自定义数字的阶乘函数不起作用
- 伯克利数据库 Db->get 使用自定义比较函数时不起作用
- mysql C 连接器函数在类中定义时不起作用
- C ++ 11,为什么为向量定义unordered_map这个不起作用<int>?
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用