如何检测类中是否有特定的成员变量?
为了创建算法模板函数,我需要知道类中的x或X(和y或Y)是模板参数。当我的函数用于MFC CPoint类或GDI + PointF类或其他类时,它可能很有用。他们都使用不同的x。我的解决方案可以简化为以下代码:
template<int> struct TT {typedef int type;};
template<class P> bool Check_x(P p, typename TT<sizeof(&P::x)>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<sizeof(&P::X)>::type b = 0) { return false; }
struct P1 {int x; };
struct P2 {float X; };
// it also could be struct P3 {unknown_type X; };
int main()
{
P1 p1 = {1};
P2 p2 = {1};
Check_x(p1); // must return true
Check_x(p2); // must return false
return 0;
}
但是在GNU C ++中进行编译时,它无法在Visual Studio中编译。使用Visual Studio,我可以使用以下模板:
template<class P> bool Check_x(P p, typename TT<&P::x==&P::x>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<&P::X==&P::X>::type b = 0) { return false; }
但它不能在GNU C ++中编译。有通用解决方案吗?
UPD:此处的结构P1和P2仅作为示例。可能有任何具有未知成员的类。
PS请不要在这里发布C ++ 11解决方案,因为它们很明显且与问题无关。
波斯汪
慕桂英4014372
相关分类