In einem Vorstellungsgespräch wurde ich gebeten, eine Metafunktion zu schreiben, die bestimmt, ob ein Typ ein Zeiger war. Das ist, was ich vorgestellt:Wie kann ich kompilieren Zeit Zusicherungen ohne C++ 11
template <typename T>
struct is_pointer
{ static const bool value = false; }
template <typename T>
struct is_pointer<T *>
{ static const bool value = true; }
Dann wurde ich gebeten, eine Meta-Assertion zu schreiben, die während der Kompilierung fehl, wenn meine is_pointer
Funktion nicht ist das Richtige zu tun.
Als ich static_assert
verwendete, sagte er mir explizit, dass ich nur C++ 98 Standard verwenden darf. Wie kann ich das erreichen?
assert<!is_pointer<char>::value>(); // valid
assert<is_pointer<char *>::value>(); // valid
assert<is_pointer<char>::value>(); // compilation error:
// use of incomplete class
ich an dieser Stelle denken Sie die „Prüfung bestanden um zu sehen, ob Sie tatsächlich die Sprache "Teil des Interviews kennen, es sei denn, das Unternehmen macht C++ - Compiler oder so etwas. –