c++ 是否可以在std::any变量中存储和检索容器(例如std::vector)?

wn9m85ua  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(237)

我想在C++中为我的单元测试值使用heterogenous map。其他线程推荐使用带有any_cast的std::any来实现这个目的。这对于像int和double这样的基元类型很有效,但是如果我使用std::vector,我就无法检索值。
我的代码如下所示:

std::map<std::string, std::any> expected = {
        { "getInt", 1 },
        { "getDouble", 1.0 },
        { "getVector", std::vector<int> { 1, 2 } },
    }
    
    int getInt = std::any_cast<int>(expected["getInt"])
    double getDouble= std::any_cast<double>(expected["getDouble"])

到目前为止,代码按预期工作,尽管较新的语言对any_cast的需求令人感到费解,但如果我尝试对向量做同样的操作,它会失败:

std::vector<int> getVector= std::any_cast<std::vector>(expected["getVector"])

是否有办法从std::any值中检索聚合?

ve7v8dk2

ve7v8dk21#

您必须在std::any_cast中包含向量的类型。代码:

std::vector<int> getVector = std::any_cast<std::vector<int>>(expected["getVector"]);

相关问题