std::optional是C++17中引入的一个非常有用的类型,用于表示可能包含值或不包含值(即“可选”值)的容器。它提供了一种比使用nullptr或特殊值更安全的方式来处理可能不存在的数据。下面是一个使用std::optional的简单示例:
当一个 optional
#include <iostream>
#include <optional>
// 模拟创建工厂
std::optional<std::string> create(int type)
{
switch (type)
{
case 1:
return "class1";
break;
case 2:
return "class2";
break;
case 3:
return "class3";
break;
default:
return {};
break;
}
return {};
}
int main()
{
auto value = create(3);
if (value)
{
std::cout << "create: " << *value << std::endl;
}
else
{
std::cout << "not create" << std::endl;
}
auto no_value = create(-1);
if (no_value)
{
std::cout << "create: " << no_value.value() << std::endl;
}
else
{
std::cout << "not create." << std::endl;
}
return 0;
}
#include <iostream>
#include <optional>
#include <memory>
class base {
public:
base(){}
virtual ~base(){}
virtual void Show()
{
std::cout << "base\n";
}
};
class A: public base{
public:
A(){}
virtual ~A(){}
virtual void Show()
{
std::cout << "A\n";
}
};
class B : public base {
public:
B() {}
virtual ~B() {}
virtual void Show()
{
std::cout << "B\n";
}
};
// 模拟创建工厂
std::optional<std::shared_ptr<base>> create(int type)
{
switch (type)
{
case 1:
return std::make_shared<base>();
break;
case 2:
return std::make_shared<A>();
break;
case 3:
return std::make_shared<B>();
break;
default:
return {};
break;
}
return {};
}
int main()
{
auto value = create(1);
if (value)
{
(*value)->Show();
}
else
{
std::cout << "not create" << std::endl;
}
value = create(2);
if (value)
{
(*value)->Show();
}
else
{
std::cout << "not create" << std::endl;
}
value = create(3);
if (value)
{
(*value)->Show();
}
else
{
std::cout << "not create" << std::endl;
}
auto no_value = create(-1);
if (no_value)
{
std::cout << "create: " << no_value.value() << std::endl;
}
else
{
std::cout << "not create." << std::endl;
}
return 0;
}
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明来自 张拓的博客!