数値型をラップする (および追加機能を提供する) 型を作成したいと思います。
さらに、数値とラッパーの両方を暗黙的に相互に変換できるようにする必要があります。
これまでのところ、私は持っています:
template<class T>
struct Wrapper
{
T value;
Wrapper() { }
Wrapper(T const &value) : value(value) { }
// ... operators defined here ...
};
ほぼ問題ありませんが、組み込み型とまったく同じようには動作しません。
#include <iostream>
int main()
{
unsigned int x1, x2 = unsigned int();
Wrapper<unsigned int> y1, y2 = Wrapper<unsigned int>();
std::cerr << x1 << std::endl; // uninitialized, as expected
std::cerr << y1.value << std::endl; // uninitialized, as expected
std::cerr << x2 << std::endl; // zero-initialized, as expected
std::cerr << y2.value << std::endl; // uninitialized!?!
}
Wrapper
そのようなステートメントを設計する方法はありますか
Wrapper<unsigned int> y2 = Wrapper<unsigned int>();
value
内部を初期化しますが、次のようなステートメントを強制することはありません
Wrapper<unsigned int> y1;
また、同じことをしますか?
つまり、初期化に関して組み込み型とまったく同じように動作する型を作成することは可能ですか?