具有特征的 C++ 类型擦除
Posted
技术标签:
【中文标题】具有特征的 C++ 类型擦除【英文标题】:C++ Type erasure with traits 【发布时间】:2017-12-18 10:42:13 【问题描述】:我想知道这是否可以创建一个符合这样一个特征的擦除类型:
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);
【问题讨论】:
是.read
还是.Read
?
这是 .Read,我 derped。
看看Boost.TypeErasure boost.org/doc/libs/1_65_1/doc/html/boost_typeerasure.html
你不想概念吗?
@Jarod42 如何在 llvm 5 中使用概念?
【参考方案1】:
没有任何外部库,需要做很多工作才能实现您想要的。使用 Louis Dionne 的dyno
:
DYNO_INTERFACE(Readable,
(read, uint8_t (uint16_t))
);
auto test(Readable& r) -> uint8_t
return r.read(0);
【讨论】:
是的,我知道这个库,但由于缺少 HanaConfig.cmake,我无法使其与 CMake 一起使用:/ @uknys:在 GitHub 上打开一个问题? github.com/ldionne/dyno/issues以上是关于具有特征的 C++ 类型擦除的主要内容,如果未能解决你的问题,请参考以下文章