c++11实现c++14的optional(二)

2014-11-24 10:10:37 · 作者: · 浏览: 4
sign(const Optional& other)
{
if (other.IsInit())
{
Copy(other.m_data);
m_hasInit = true;
}
else
{
Destroy();
}
}
void Assign(Optional&& other)
{
if (other.IsInit())
{
Move(std::move(other.m_data));
m_hasInit = true;
other.Destroy();
}
else
{
Destroy();
}
}
void Move(data_t&& val)
{
Destroy();
new (&m_data) T(std::move(*((T*)
(&val))));
}
void Copy(const data_t& val)
{
Destroy();
new (&m_data) T(*((T*) (&val)));
}
private:
bool m_hasInit;
data_t m_data;
};
复制代码
测试代码:
复制代码
void TestOptional()
{
Optional a("ok");
Optional b("ok");
Optional c("aa");
c = a;
if (c
cout << "<" << endl;
if (a == b)
cout << "=" << endl;
map, int> mymap;
mymap.insert(std::make_pair(a, 1));
mymap.insert(std::make_pair(c, 2));
auto it = mymap.find(a);
cout << it->second << endl;
}
复制代码
可以看到用法和boost.optional的用法保持一致,实现起来也比较简单。