__if_exists-Anweisung

Die __if_exists Anweisung testet, ob der angegebene Bezeichner vorhanden ist. Wenn der Bezeichner vorhanden ist, wird der angegebene Anweisungsblock ausgeführt.

Syntax

__if_exists ( identifier ) {
statements
};

Parameter

identifier
Der Bezeichner, dessen Vorhandensein Sie überprüfen möchten.

Aussagen
Eine oder mehrere Anweisungen, die ausgeführt werden sollen, wenn der Bezeichner vorhanden ist.

Hinweise

Achtung

Um die zuverlässigsten Ergebnisse zu erzielen, verwenden Sie die __if_exists Anweisung unter den folgenden Einschränkungen.

  • Wenden Sie die __if_exists Anweisung nur auf einfache Typen und nicht auf Vorlagen an.

  • Wenden Sie die __if_exists Anweisung auf Bezeichner innerhalb oder außerhalb einer Klasse an. Wenden Sie die __if_exists Anweisung nicht auf lokale Variablen an.

  • Verwenden Sie die __if_exists Anweisung nur im Textkörper einer Funktion. Außerhalb des Textkörpers einer Funktion kann die __if_exists Anweisung nur vollständig definierte Typen testen.

  • Wenn Sie auf überladene Funktionen testen, können Sie nicht auf eine bestimmte Form der Überladung testen.

Die Ergänzung zur Anweisung ist die __if_exists__if_not_exists Anweisung.

Beispiel

Beachten Sie, dass in diesem Beispiel Vorlagen verwendet werden, was nicht empfohlen wird.

// the__if_exists_statement.cpp
// compile with: /EHsc
#include <iostream>

template<typename T>
class X : public T {
public:
   void Dump() {
      std::cout << "In X<T>::Dump()" << std::endl;

      __if_exists(T::Dump) {
         T::Dump();
      }

      __if_not_exists(T::Dump) {
         std::cout << "T::Dump does not exist" << std::endl;
      }
   }
};

class A {
public:
   void Dump() {
      std::cout << "In A::Dump()" << std::endl;
   }
};

class B {};

bool g_bFlag = true;

class C {
public:
   void f(int);
   void f(double);
};

int main() {
   X<A> x1;
   X<B> x2;

   x1.Dump();
   x2.Dump();

   __if_exists(::g_bFlag) {
      std::cout << "g_bFlag = " << g_bFlag << std::endl;
   }

   __if_exists(C::f) {
      std::cout << "C::f exists" << std::endl;
   }

   return 0;
}

Ausgabe

In X<T>::Dump()
In A::Dump()
In X<T>::Dump()
T::Dump does not exist
g_bFlag = 1
C::f exists

Siehe auch

Auswahlanweisungen
Schlüsselwörter
__if_not_exists-Anweisung