2017-12-18 129 views
1

我想知道这是可能使符合性状像这样的擦除类型: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); 
} 
+0

它是'.read'还是'.Read'? – alfC

+0

这是。阅读,我derped。 – uknys

+0

看看Boost.TypeErasure http://www.boost.org/doc/libs/1_65_1/doc/html/boost_typeerasure.html – alfC

回答

1

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

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

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

是的,我知道这个库,但我不能使它与CMake的工作,由于HanaConfig.cmake失踪:/ – uknys

+0

@uknys:在GitHub上打开一个问题? https://github.com/ldionne/dyno/issues –