IF-THEN-ELSE
Version >= C++ 11
標準庫標頭檔案 <type_traits>
中的 std::conditional
型別可以根據編譯時布林值選擇一種型別或另一種型別:
template<typename T>
struct ValueOrPointer
{
typename std::conditional<(sizeof(T) > sizeof(void*)), T*, T>::type vop;
};
如果 T
大於指標的大小,則此結構包含指向 T
的指標;如果小於或等於指標的大小,則該結構包含 T
本身。因此 sizeof(ValueOrPointer)
將始終<= sizeof(void*)
。