【发布时间】:2018-10-09 07:10:27
【问题描述】:
自 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;
}
给变量var 分配了一个double,然后给它分配了std::string。
为什么要引入std::any?
我认为这违反了least astonishment rule,因为我很难想到一种情况,可以用它来更清楚地表达我喜欢表达的东西。
当std::any 是有益的时候,谁能给我一个很好的例子。
【问题讨论】:
-
如果你使用
std::any来混淆代码,那么肯定它违反了最小惊讶规则。如果您将其用作更安全的void*(请参阅 T.C. 链接到的文章),那就太令人惊讶了。 -
使用
std::any,过去你会使用void*。也就是说,理想情况下,几乎无处可去。 -
和工厂模式一起好不好?