[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 を使わずともあっさり解決できました.
トラックバック
トラックバック URI: https://www.pakunet.jp/hoge/trackback/2006101201
トラックバックはありません.