- ベストアンサー
typedef unsigned int UINT;があるか確かめる方法は?
お世話になります C++で、 typedef unsigned int UINT; って、宣言があると思うのですが、 "typedef"宣言って、 #if defined(...) の、ように、宣言があるか確かめる方法ってあるのでしょうか? よろしくお願い致します
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
以下のコードで、一応判別できるみたいです。 //typedef unsigned int UINT; namespace hoge{ typedef void UINT; } using namespace hoge; template <class T, class U> struct bar { static const bool value = false; }; template <class T> struct bar<T,T> { static const bool value = true; }; int main() { if (bar< ::UINT, unsigned int>::value) { cout << "UINT is defined" << endl; } else { cout << "UINT is not defined" << endl; } return 0; }
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
#2です。 これだとうまくいきませんね。失礼しました。
- jacta
- ベストアンサー率26% (845/3158)
これでどうでしょう? std::pair<unsigned int> UINT(...); if (sizeof UINT() == sizeof(unsigned int)) { // UINTの定義あり } else { // UINTの定義なし } 定数式で評価できるので、テンプレート実引数に指定することも可能です。静的に何かやりたいときは、テンプレートメタプログラミングを行えばよいでしょう。
- aris-wiz
- ベストアンサー率38% (96/252)
C++にはUINTはありません。 UINTはWindowsがWinDef.hで定義している独自型です。 VC6.0などの環境では、typedefはリンク時に解決されるのか、 #ifdef UINTなどでは判別できません。 なので、コンパイルする環境はWindowsであるかどうかで判定 するしかないかと。。。 #ifndef _WIN32 //Windows環境ではないのでUINTは無い typedef unsigned int UINT; #endif