如何打印使用“std::any”类型的变量插入的字符串向量的元素

Posted

技术标签:

【中文标题】如何打印使用“std::any”类型的变量插入的字符串向量的元素【英文标题】:How to print an element of a string vector which was inserted using a variable of type "std::any" 【发布时间】:2020-06-25 08:03:52 【问题描述】:

这是我的 c++ 代码的主要功能。

int main() 
vector<string> a;
any x;
x="Hello";
a.insert(a.begin(),any_cast<string>(x));
cout<<a[0]<<endl;

这给了我这样的错误:

terminate called after throwing an instance of 'std::bad_any_cast'
  what():  bad any_cast
Aborted (core dumped)

【问题讨论】:

【参考方案1】:

问题是,"Hello" 的类型为 const char[6],并且会衰减为 const char*,而不是 std::string。这就是为什么你在尝试从std::any 获取std::string 时得到std::bad_any_cast

你可以换成const char*点赞

a.insert(a.begin(),any_cast<const char*>(x));

或者从一开始就将std::string分配给std::any

x=std::string("Hello");

或使用literals(C++14 起)

x="Hello"s;

【讨论】:

那么如果向量是 int 类型并且我在 X 中存储了一个 int 值。 @AviH 你有什么问题吗?它应该可以正常工作。 LIVE 非常感谢?。你说的弦乐有用。非常感谢。???????。 嘿抱歉,但它显示相同的错误与双值。 ?。字符串有效,但现在 double 出现问题。 @AviH 请创建mcve,或显示您的代码。

以上是关于如何打印使用“std::any”类型的变量插入的字符串向量的元素的主要内容,如果未能解决你的问题,请参考以下文章

std::any - 为啥它缺少这么多运算符?

std::reference_wrapper<std::any> 上的类型特征

你能切换一个 std::any.type() 吗?

是否可以仅从 std::any 使用 std::reference_wrapper 创建 std::any?

获取 std::any 的大小

GMOCKing 接口时 std::any 的不完整类型