拼图:逃避对typeid的检查

时间:2011-05-18 09:56:19

标签: c++ typeid

我偶然形成了一个很好的面试问题。 :)

template<typename T>
bool foo (T obj)
{
  if(typeid(T) == typeid(obj))
    return false;
  return true;  // <-- execute this
}

您必须以这样的方式致电(仅限上述)foo(),以便返回true。条件是,

  1. 无法编辑或超载foo()typeid
  2. 不允许任何平台特定黑客入侵
  3. 不允许#define

2 个答案:

答案 0 :(得分:11)

#include <cassert>

struct B { virtual ~B() {} };

int main()
{
    struct : B {} x;
    assert(foo<B&>(x));
}

行动是over there

答案 1 :(得分:2)

int main ()
{
  typedef char C[1];
  foo<C>(0);  // returns true;
}

请参阅this question以了解此答案的解释和此问题的根源。