将常量表达式转换为

时间:2015-12-08 16:55:54

标签: templates c++11 non-type

对于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,但任何至少简化任务的解决方案也是受欢迎的。

0 个答案:

没有答案