gpt4 book ai didi

c++ - C++中不相关T的容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:30 28 4
gpt4 key购买 nike

如果我有以下假设类:

namespace System
{
template <class T>
class Container
{
public:
Container() { }
~Container() { }
}
}

如果我用不同的 T 实例化两个容器,比如:

Container<int> a;
Container<string> b;

我想创建指向 a 和 b 的 vector 。由于 a 和 b 是不同的类型,通常这是不可能的。但是,如果我做了类似的事情:

std::stack<void*> _collection;
void *p = reinterpret_cast<void*>(&a);
void *q = reinterpret_cast<void*>(&b);
_collection.push(a);
_collection.push(b);

然后,我可以像这样从 _collection 中取回 a 和 b:

Container<string> b = *reinterpret_cast<Container<string>*>(_collection.pop());
Container<int> a = *reinterpret_cast<Container<int>*>(_collection.pop());

我的问题是,这是存储不相关类型集合的最佳方式吗?这也是存储和检索 vector 指针(重新解释转换)的首选方式吗?我环顾四周,发现 boost 有更好的方法来解决这个问题,Boost::Any,但由于这是一个我正在进行的学习项目,我想自己做(我也很想找到一个很好的理由正确使用 reinterpret_cast)。

最佳答案

考虑 boost::any boost::variant 如果你想存储异构类型的对象。

在决定使用哪一个之前,先看看比较:

希望它能帮助您做出正确的决定。选择一个,以及标准库中的任何容器来存储对象,std::stack<boost::any> , std::stack<boost::variant> ,或任何其他。 不要编写自己的容器。

我再说一遍不要编写自己的容器。使用标准库中的容器。它们经过了充分测试。

关于c++ - C++中不相关T的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com