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();
        });

 

 

posted @ 2021-12-10 09:43  sciapex  阅读(87)  评论(0编辑  收藏  举报