注意:我之前已经问过类似的问题,但我没有发现它们有用或非常清楚.
第二个注意事项:对于此项目/作业的范围,我试图避免使用第三方库,例如Boost.
我试图看看是否有一种方法可以让每个索引中的单个向量保持多种类型.例如,假设我有以下代码示例:
vector<something magical to hold various types> vec;
int x = 3;
string hi = "Hello World";
MyStruct s = {3, "Hi", 4.01};
vec.push_back(x);
vec.push_back(hi);
vec.push_back(s);
Run Code Online (Sandbox Code Playgroud)
我听说vector<void*>可以工作,但随后内存分配变得棘手,如果插入某个索引的值大于预期值,则总是有可能无意中覆盖附近内存中的某些部分.
在我的实际应用中,我知道什么是可能的类型可以被插入载体,但这些类型并不都来自同一个超类派生,并没有保证所有这些类型的将被推到载体或以何种顺序.
有没有办法可以安全地完成我在代码示例中演示的目标?
感谢您的时间.
我需要将元素存储在连续的容器中,例如std::vector. 问题是容器需要支持插入或两者都支持int和std::string。
这在 C++ 中似乎很难做到,因为它是一种强类型语言。我想做一些类似的事情
std::vector<std::pair<int, std::string>> container;
Run Code Online (Sandbox Code Playgroud)
或者
struct custom_struct {
int val;
std::string;
bool is_val; // true if integer and false if string
};
std::vector<custom_struct> container;
Run Code Online (Sandbox Code Playgroud)
但这似乎都不是一个很好的选择。第一个的问题是,我不知道如何在该对表示整数还是字符串之间切换,因此为什么我想出了第二种方法,尽管第二种方法不是很优雅,因为我必须重复键入检查使用is_val。
我可以在 C++ 中考虑其他方法吗?
我的项目中必须有一个语义堆栈,它将在其中保存多种类型。
我的目标是让我的项目使用现代 C++。
拥有任何类型的堆栈的正确方法是什么?
java 中的等效版本是Stack<Object>.
其中哪些是正确的?
void*并将其转换为我想要的类型。