C ++类型删除与特征

问题描述 投票:1回答:1

我想知道这可以制作一个符合这个特征的擦除类型:

template<class T>
using read_t = std::conditional_t<true,
    decltype(std::declval<T>().Read(uint16_t{})),
    std::integral_constant<uint8_t (T::*)(uint16_t), &T::Read>>;

并像这样使用它?

using any_readable_t = any<read_t>; 
auto test(any_readable_t &r) -> uint8_t {
     return r.Read(0);
}
c++ c++17 type-erasure stdany
1个回答
1
投票

没有任何外部库,需要做很多工作才能实现你想要的。使用Louis Dionne的dyno

DYNO_INTERFACE(Readable,
    (read, uint8_t (uint16_t))
);

auto test(Readable& r) -> uint8_t {
    return r.read(0);
}
© www.soinside.com 2019 - 2024. All rights reserved.