プロが教えるわが家の防犯対策術!

お世話になります

C++で、

typedef unsigned int UINT;

って、宣言があると思うのですが、
"typedef"宣言って、
#if defined(...)
の、ように、宣言があるか確かめる方法ってあるのでしょうか?


よろしくお願い致します

A 回答 (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;
}
    • good
    • 0

#2です。


これだとうまくいきませんね。失礼しました。
    • good
    • 0

これでどうでしょう?



std::pair<unsigned int> UINT(...);

if (sizeof UINT() == sizeof(unsigned int))
{
 // UINTの定義あり
}
else
{
 // UINTの定義なし
}

定数式で評価できるので、テンプレート実引数に指定することも可能です。静的に何かやりたいときは、テンプレートメタプログラミングを行えばよいでしょう。
    • good
    • 0

C++にはUINTはありません。


UINTはWindowsがWinDef.hで定義している独自型です。
VC6.0などの環境では、typedefはリンク時に解決されるのか、
#ifdef UINTなどでは判別できません。
なので、コンパイルする環境はWindowsであるかどうかで判定
するしかないかと。。。

#ifndef _WIN32
//Windows環境ではないのでUINTは無い
typedef unsigned int UINT;
#endif
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!