c++ - 我什么时候应该使用 std::any

标签 c++ c++17 stdany

自从 C++17 std::any 被引入。现在可以编写这样的代码

#include <iostream>
#include <any>
#include <string>

int main () {
    const double d = 1.2;
    std::any var = d;
    const std::string str = "Hello World";
    var = str;
}

一个 double 被分配给变量 var 并且一个 std::string 被分配给它。

为什么要引入 std::any

我认为这违反了最小惊讶规则,因为我很难想出一种情况,它可以用来更清楚地表达我喜欢表达的东西。

std::any 有益时,有人能给我一个很好的例子吗?

https://gcc.godbolt.org/z/-kepOD

最佳答案

何时使用
void* 作为一种极其不安全的模式,具有一些有限的用例,std::any 增加了类型安全,这就是它有一些实际用例的原因。

一些可能性:

  • 在库中——当库类型必须在不知道 一组可用类型。
  • 解析文件——如果你真的不能指定支持的是什么 类型。
  • 消息传递。
  • 与脚本语言的绑定(bind)。
  • 为脚本语言实现解释器
  • 用户界面 - 控件可能包含任何内容
  • 编辑器中的实体
    ( ref )

关于c++ - 我什么时候应该使用 std::any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397808/

相关文章:

c++ - 将任意整数转换为 void*

c++ - 我可以在另一个 .hpp 文件中包含多个 .hpp 文件吗?

c++ - 为什么 std::vector 的字符串文字初始值设定项列表不能在 C++ 中创建 std::vector<std::string> ?

c++ - `auto` 和 `std::any` 有什么区别?

c++ - 重载运算符*(乘法)返回不同的结果

c++ - 如何在 C++ 中使用字符串变量作为路径 url

C++ 为什么 `observer_ptr<W>` 有一个采用 `W*` 的构造函数?

c++ - 为什么 std::is_move_constructible<S>::value == false 尽管 S move 构造很好?什么是正确的行为?

C++ std::map 持有任何类型的值

c++ - 在 std::map 中使用 'auto'