std::function
.../main.cpp:9: ...server.hpp: In member function ‘virtual void server::run()’: ...server.hpp:151:10: error: cannot convert ‘server::run()::<lambda(auto:10)>’ to ‘ara::com::internal::skeleton::Field_set<::trafficsigndetector::server::Server_ServiceInterface::Fields::field_1>::Set_handler’ {aka ‘std::function<ac::core::Future<unsigned char, ac::core::Error_code>(const unsigned char&)>’} 151 | }); | ^ In file included from generated/inc/server_serviceinterface/eb/trafficsigndetector/server/server_serviceinterface_skeleton_fields.h:13, from generated/inc/server_serviceinterface/eb/trafficsigndetector/server/server_serviceinterface_skeleton.h:12, from impl/src/../inc/method_server.hpp:24, from impl/src/main.cpp:9: .../field.hpp:144:41: note: initializing argument 1 of ‘void ara::com::internal::skeleton::Field_set<FieldTraits>::RegisterSetHandler(ara::com::internal::skeleton::Field_set<FieldTraits>::Set_handler) [with FieldTraits = ::trafficsigndetector::server::Server_ServiceInterface::Fields::field_1; ara::com::internal::skeleton::Field_set<FieldTraits>::Set_handler = std::function<ac::core::Future<unsigned char, ac::core::Error_code>(const unsigned char&)>; typename FieldTraits::FieldType = unsigned char; typename FieldTraits::FieldType = unsigned char]
错误提示无法转换,但未具体指出错误点,容易让人误解。
这里最主要是主要要保证返回对象的数据类型,数据类型根据泛化而来,通过提示可以确认FieldTraits::FieldType = unsigned char,故此在声明返回对象时需要定义指定类型,不然会出现与其他头文件定义的类型冲突
保证定义ara::core::Promise<UInt8> promise与std::function<ac::core::Future<unsigned char, ac::core::Error_code>对应
m_server->field_1.RegisterSetHandler([&](auto value1) -> auto { ara::core::Promise<UInt8> promise; promise.set_value(value1); LogInfo()<<"Method_server: Sending update set data:" << value1; this->m_server->field_1.Update(m_iData); return promise.get_future(); });