template<class T>
struct is_class_or_union
{
struct twochar { char _[2]; };
template <class U>
static char is_class_or_union_tester(void(U::*)(void));
template <class U>
static twochar is_class_or_union_tester(...);
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
};
上述代碼來自boost庫的meta_utils.hpp
。Boost代碼摘錄 - 無法理解
is_class_or_union_tester
似乎是一個static
函數返回char
並採取指針成員函數(返回void並接受無)。沒有功能體,它似乎沒有在其他地方定義。我不明白它是如何工作的,而且最重要的是,我不明白該功能的用途。- 我不明白以下代碼的概念:
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
sizeof
運算符應用於什麼?他們想在這裏找到什麼?
[C++ SFINAE示例?]的可能的重複(http://stackoverflow.com/questions/982808/c-sfinae-examples) – soon
@peter感謝您的解釋。它當然有幫助。我不知道沒有鏈接器錯誤(對於函數定義),因爲該函數從未被調用? –
沒有鏈接器錯誤,因爲實際上沒有創建代碼。 'sizeof'實際上並不執行它傳遞的表達式,而是計算出結果的類型,然後計算它的大小。 –