我想制作一种包装数字类型(并提供附加功能)的类型。
此外,我需要数字和包装器都可以相互隐式转换。
到目前为止,我有:
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;
也这样做?
换句话说,是否有可能创建一个在初始化方面与内置类型完全相同的类型?