__if_exists, instruction
L'instruction __if_exists vérifie si l'identificateur spécifié existe. Si l'identificateur existe, le bloc d'instructions spécifié est exécuté.
__if_exists ( identifier ) {
statements
};
Paramètres
Paramètre |
Description |
---|---|
identifier |
Identificateur dont vous voulez tester l'existence. |
statements |
Une ou plusieurs instructions à exécuter si identifier existe. |
Notes
Avertissement
Pour obtenir les résultats les plus fiables, utilisez l'instruction __if_exists sous les contraintes suivantes.
Appliquez l'instruction __if_exists uniquement aux types simples, et non aux modèles.
Appliquez l'instruction __if_exists aux identificateurs à l'intérieur ou à l'extérieur d'une classe. N'appliquez pas l'instruction __if_exists aux variables locales.
Utilisez l'instruction __if_exists uniquement dans le corps d'une fonction. En dehors du corps d'une fonction, l'instruction __if_exists peut tester uniquement les types entièrement définis.
Lorsque vous vérifiez la présence de fonctions surchargées, vous ne pouvez pas effectuer le test sur une forme spécifique de la surcharge.
Le complément de l'instruction __if_exists est l'instruction __if_not_exists.
Exemple
Notez que cet exemple utilise des modèles, ce qui n'est pas recommandé.
// 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;
}
Sortie
In X<T>::Dump()
In A::Dump()
In X<T>::Dump()
T::Dump does not exist
g_bFlag = 1
C::f exists