对于system的声明性定义部分,某些处理程序*必须作为类型传递:
int read_handler();
class handler {...};
typedef bluetoe::service<
bluetoe::service_uuid< 0x8C8B4094, 0x0DE2, 0x499F, 0xA28A, 0x4EED5BC73CA9 >,
bluetoe::characteristic<
bluetoe::free_read_handler< read_handler >, // *
bluetoe::member_read_handler< handler, &handler::read, &handler_instance > // *
>
> service;
特别是对于成员函数版本,必须为每个cv限定符组合定义类型&#34; -conversion的&#34;值。对于每次转换,我都要引入一个新名称。
所以我正在寻找一种方法来统一这个,而没有划伤,零内存大小属性(所以std :: function不是一个选项)。我尝试过的是推断类型并通过constexpr函数捕获处理程序的值。沿线的东西:
typedef bluetoe::service<
bluetoe::service_uuid< 0x8C8B4094, 0x0DE2, 0x499F, 0xA28A, 0x4EED5BC73CA9 >,
bluetoe::characteristic<
decltype( bluetoe::bind( read_handler ) ),
decltype( bluetoe::bind( handler, &handler::read, &handler_instance ) )
>
> service;
bind
:
auto constexpr bind( void(*f)() ) -> bluetoe::free_read_handler< f >
{
return bluetoe::free_read_handler< f >();
}
有人可以考虑使解决方案能够实现这一目标。最好使用C ++ 11,但任何至少简化任务的解决方案也是受欢迎的。