54得票8回答
C++ std::map 可以保存任意类型的值

基本上我想要一个名为MyClass的类,它拥有一个哈希映射,将字段名称(字符串)映射到任何类型的值。为此,我编写了一个单独的MyField类,用于保存类型和值信息。 目前为止,这是我的实现: template <typename T> class MyField { T...

33得票4回答
何时应使用std::any?

自从C++17引入了std::any,现在可以像这样编写代码#include <iostream> #include <any> #include <string> int main () { const double d = 1.2; s...

25得票2回答
类型擦除指的是在运行时丢失类型信息的过程。有关此主题的任何问题吗?

假设我想使用类型抹消来进行类型擦除。 我可以为变体创建伪方法,从而实现自然的:pseudo_method print = [](auto&& self, auto&& os){ os << self; }; std::variant<A,B...

22得票4回答
C++11标准是否提供类似于boost::any的东西?

例如,boost::function 几乎完全转移到了 std::function,同样的情况也发生在 boost::shared_ptr 上。 但是我找不到 std::any? 它是否被重命名或由于某些原因根本没有放置在新标准中?

15得票1回答
std::any对于无法进行复制构造的对象

我有一个对象,它持有一个unique_ptr,因此不能进行浅拷贝(而我不想这样做)。 我希望使用std::any来持有该对象,但我找到的唯一选择是让std::any持有一个指针,这会增加一个无用的间接引用,或者让我的对象具有一个unique_ptr。下面的代码将希望能说明我的观点: //C...

13得票5回答
在std::vector的std::any中查找元素

我想检查一个向量中是否存在某个元素。我知道下面的代码可以进行检查。#include <algorithm> if ( std::find(vector.begin(), vector.end(), item) != vector.end() ) std::cout <...

11得票5回答
“auto”和“std::any”有什么区别?

我最近发现了 C++17 引入的 std::any 类,它基于 boost::any。该类可以“持有任何类型的实例”,而 auto 可以自动推断变量的数据类型。 那么主要的区别是什么?优缺点分别是什么?

11得票3回答
有没有办法将包含派生指针的std::any转换为基类指针,而不需要知道派生类型?

假设我有一个std::any对象,它可能包含或不包含某个特定基类B的一些派生类指针。是否有任何方法可以执行以下操作: 如果std::any对象持有可转换为B *的内容,则返回B *,否则 抛出异常,如果没有? 看起来dynamic_cast和std::any_cast各提供了其中的一半...

10得票1回答
能否在std::any中存储一个引用?

我试着做一些尝试,然后想到了以下问题:是否可能在std::any中存储对值的引用? 我尝试了以下方法:#include <any> #include <iostream> #include <functional> auto func_by_pointe...

10得票1回答
`std::any_cast`返回一个副本。

我在阅读std::any_cast的文档时,发现它的API将强制转换的返回值设定为所持对象的值或指向它的指针。为什么不直接返回引用呢?每次使用非指针类型参数调用该函数都需要进行复制。 我可以看出,指针版本的转换可能会更清晰地表达意图,但为什么不能像这样返回一个引用呢?template<...