我該如何懶惰評估std :: conditional中的第二個參數?懶惰評價
#include "stdafx.h"
#include <type_traits>
struct Null{};
struct _1{enum {one = true,two = false};};
struct _2{enum {two = true, one = false};};
template<class T>
struct is_nulltype
{
enum {value = false};
};
template<>
struct is_nulltype<Null>
{
enum {value = true};
};
template<class T>
struct X : std::conditional<is_nulltype<T>::value,Null,typename std::conditional<T::one,_1,_2>::type>::type
{
};
int _tmain(int argc, _TCHAR* argv[])
{
X<Null> x;//won't compile no Null::one but I don't need that member in Null at all
return 0;
}
對於手頭的問題,只需將'X'專用於'Null'類型。 – 2011-03-15 19:38:10
@Alf這意味着我必須有兩個「幾乎」相同的類。不行。 – 2011-03-15 19:47:46
它看起來像你在這裏尋找的是「懶惰編譯」,而不是「懶惰評估」。在X的定義中將T替換爲T會導致語法錯誤。語法的評估不能被延遲。 – goedson 2011-03-15 20:16:41