我正在尝试使用SFINAE来检测非成员变量存在。基本上它适合我的需要来测试是否声明名称并且可以在实际范围内看到,忽略变量的类型。
这样的事情:
int var1;
{ int var2; }
cout << var1Exists::value << endl; // true
cout << var2Exists::value << endl; // false, since 'var2' went out of scope
我找到了如何check for a non-member function(实际找到two ways),但我无法用一个简单的变量来做到这一点。
目前我正在做这样的事情:
namespace sfinae{
template<typename Type>
class variableName{
template<void* ptr> struct lowest;
template<typename T, typename ptr = lowest<&var1>* > struct check;
template<typename U>
static std::true_type tester(check<bool>*);
template<typename U>
static std::false_type tester(...);
public:
static constexpr bool value = sizeof(tester<bool>(0))==sizeof(std::true_type);
};
}
应该测试var1
是否存在,并且 - 很明显 - 不编译,抱怨var1
未声明。说实话,我不像我想要的那样流利使用SFINAE,所以也许我错过了一些非常简单的东西。