C ++ 17 — Стирание типа C ++ с чертами

Я хотел знать, что это возможно, чтобы сделать стертый тип, который соответствует такой черте, как эта:

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

1

Решение

Без какой-либо внешней библиотеки нужно выполнить много работы, чтобы достичь того, чего вы хотите. Использование Луи Дионна dyno:

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

auto test(Readable& r) -> uint8_t {
return r.read(0);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]