如何實現使用標準c++代替MSVC的__if_exists, 實現檢測模版參數類中是否有某個成員函數
需要實現判斷從模版傳入的類是否擁有指定成員函數, 或者有別的方法, 最好不要用到boost. 謝謝各位.
在VS2015下編譯通過,如果你沒有void_t,自己寫一個也無妨
推薦閱讀:std::void_t - cppreference.comhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4436.pdfhttps://www.youtube.com/watch?v=VctviQl-SR4我補充一句,樓下的寫法都太老了,C++98時代就這麼寫了,我這個是modern C++的寫法
利用RTTI的typeof,或者C++11的decltype實現。有不少關於模板的書上都給出了例子,boost里也有類似實現。可以參考下面的鏈接:http://stackoverflow.com/questions/257288/is-it-possible-to-write-a-c-template-to-check-for-a-functions-existence
///
/// 測試函數成員
///
#define FUNCTION_NAME fuck
struct HasMemberFunctionTest {
template&< typename T, typename... TArgs &>
static auto test(int) -&> decltype(std::declval&
template&< typename T, typename... TArgs &>
static auto test(...) -&> std::false_type;
};
template&< typename T, typename... TArgs &>
using HasMemberFunction = decltype(HasMemberFunctionTest::test&< T, TArgs... &>(0));
///
/// 測試類型成員
///
#define TYPE_NAME Fuck
struct HasMemberTypeTest {
template&< typename T &>
static auto test(typename T::TYPE_NAME *) -&> std::true_type;
template&< typename T &>
static auto test(...) -&> std::false_type;
};
template &< typename T &>
using HasMemberType = decltype(HasMemberTypeTest::test&
借鑒&抄襲&了Boost
as far as I know, It doesn"t exists in C++1z。
__if_exists can enabile/dislable blocks.給你指條路:自己山寨一個boost.hana的isvalid
#include &
template&
template&
推薦閱讀: