hoge diary - October 12, 2006

[C++] 符号付き整数と符号なし整数の引数オーバーロード (2)

以前書いた符号付き整数と符号なし整数の引数オーバーロードの続編です.

あの時は autoconf を使って size_t がどの型なのかを判別すればいい,と書きましたが,後になって考えてみると,そんなことをする必要はないという考えに至りました.

int, unsigned int, long, unsigned long のそれぞれでオーバーロードしておけばいいだけの話でした.

#include <cstdio>

class A
{
private:
    int b;
public:
    A(int i) { printf("%s\n", __PRETTY_FUNCTION__); }
    A(unsigned int i) { printf("%s\n", __PRETTY_FUNCTION__); }
    A(long i) { printf("%s\n", __PRETTY_FUNCTION__); }
    A(unsigned long i) { printf("%s\n", __PRETTY_FUNCTION__); }
};

こうしておけば,size_t が unsigned int, unsigned long いずれの型であっても問題なくコンパイルできますね.

もちろん,実際に呼ばれる関数は環境によって unsigned int 版になったり unsigned long 版になったりと異なってくるわけですが,通常であればいずれの関数にも同じ処理を書くはずので,問題ないでしょう.

というわけで,autoconf を使わずともあっさり解決できました.

コメント

名前(何でも可):

テキスト(http:// を含む内容は投稿できません):

トラックバック

トラックバック URI: https://www.pakunet.jp/hoge/trackback/2006101201

トラックバックはありません.


Valid XHTML 1.1! Valid CSS!
© 2004-2009 ぱくちゃん.
Last modified: Fri Nov 02 08:58:03 JST 2007