C++編程中__if_exists與__if_not_exists語句的用法
__if_exists 語句
__if_exists 語句測試指定的標識符是否存在。如果該標識符存在,則執(zhí)行指定的語句塊。
語法
__if_exists ( identifier ) {
statements
};
參數(shù)
| 參數(shù) | 說明 |
|---|---|
| identifier | 要測試其存在性的標識符。 |
| statements | identifier 存在時要執(zhí)行的一個或多個語句。 |
備注
若要實現(xiàn)最可靠的結(jié)果,請在以下約束條件下使用 __if_exists 語句。
只將 __if_exists 語句應(yīng)用于簡單類型,而不是模板。
將 __if_exists 語句應(yīng)用于類的內(nèi)部或外部的標識符。請勿將 __if_exists 語句應(yīng)用于局部變量。
請僅在函數(shù)的主體中使用該 __if_exists 語句。在函數(shù)主體外部,__if_exists 語句僅能測試完全定義的類型。
在測試重載函數(shù)時,不能測試特定形式的重載。
__if_exists 語句的補集是 __if_not_exists 語句。
請注意,此示例使用了模板,不建議這樣做。
// 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
__if_not_exists 語句
__if_not_exists 語句測試指定的標識符是否存在。如果該標識符不存在,則執(zhí)行指定的語句塊。
語法
__if_not_exists ( identifier ) {
statements
};
參數(shù)
| 參數(shù) | 說明 |
|---|---|
| identifier | 要測試其存在性的標識符。 |
| statements | identifier 不存在時要執(zhí)行的一個或多個語句。 |
備注
若要實現(xiàn)最可靠的結(jié)果,請在以下約束條件下使用 __if_not_exists 語句。
只將 __if_not_exists 語句應(yīng)用于簡單類型而不是模板。
將 __if_not_exists 語句應(yīng)用于類的內(nèi)部或外部的標識符。不要將 __if_not_exists 語句應(yīng)用于局部變量。
僅在函數(shù)的主體中使用 __if_not_exists 語句。在函數(shù)主體的外部,__if_not_exists 語句僅能測試完全定義的類型。
在測試重載函數(shù)時,不能測試特定形式的重載。
__if_not_exists 語句的補集為 __if_exists 語句。
相關(guān)文章
詳解C語言中printf輸出的相關(guān)函數(shù)
這篇文章主要介紹了C語言中printf輸出的相關(guān)函數(shù)總結(jié),是C語言入門學(xué)習中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08
C++實現(xiàn)將s16le的音頻流轉(zhuǎn)換為float類型
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)將s16le的音頻流轉(zhuǎn)換為float類型,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04
使用C++中string實現(xiàn)任意長度的正小數(shù)、整數(shù)之間加減法方法實例
這篇文章主要介紹了利用C++中string函數(shù)實現(xiàn)任意長度的正小數(shù)、整數(shù)之間加減法方法實例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習價值,需要的朋友們下面跟著小編一起來學(xué)習學(xué)習吧。2017-06-06
使用VS2010創(chuàng)建MFC ActiveX工程項目
VS2010開發(fā)ActiveX有兩種方法,分別是MFC和ATL。MFC開過起來比較簡單,但是最終生成的文件比較大,ATL是專門用來開發(fā)ActiveX的,但是相對比較難,必須知道很多原理機制和API。咱先從MFC開發(fā)ActiveX開始吧。2015-06-06

