Freigeben über


__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.

__if_exists ( identifier ) { 
statements
};

Parameter

Parameter

Beschreibung

identifier

Das dessen Vorhandensein des Bezeichners, das Sie testen möchten.

statements

Eine oder mehrere Anweisungen auszuführen, wenn identifiervorhanden ist.

Hinweise

WarnhinweisVorsicht

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

  • Registrieren Sie die __if_exists-Anweisung nur einfache Typen keine Vorlagen auf.

  • Wenden Sie die __if_exists-Anweisung ein Bezeichner innerhalb oder außerhalb einer Klasse zu.Registrieren Sie die __if_exists-Anweisung nicht auf lokale Variablen auf.

  • Verwenden Sie die __if_exists-Anweisung nur im Rumpf einer Funktion.Außerhalb des Texts einer Funktion kann die __if_exists-Anweisung nur vollständig definierte Typen testen.

  • Wenn Sie für überladene Funktionen testen, können Sie nicht nach einem bestimmten Format der Überladung testen.

In Ergänzung zur __if_exists-Anweisung ist die __if_not_exists-Anweisung.

Beispiel

Beachten Sie, dass in diesem Beispiel Vorlagen verwendet, die nicht angemeldet ist.

// 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;
}

Output

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

Siehe auch

Referenz

Selektionsangaben (C++)

C++-Schlüsselwörter

__if_not_exists Anweisung