2017-12-18 130 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 –