【发布时间】:2016-02-23 12:14:21
【问题描述】:
我正在使用 STL 和 boost 库实现通用堆栈数据结构。
#include <iostream>
#include <cstdio>
#include <stack>
#include <boost/any.hpp>
#include <boost/type_index.hpp>
using namespace std;
class Stack{
private:
std::stack<boost::any> st;
public:
bool empty();
int size();
boost::any top();
void push(boost::any ele);
void pop();
};
bool Stack::empty(){
return st.empty();
}
int Stack::size(){
return st.size();
}
boost::any Stack::top(){
return st.top();
}
void Stack::push(boost::any e){
st.push(e);
}
void Stack::pop(){
st.pop();
}
int main(){
Stack st;
int a = 10;
st.push(a);
int b = boost::any_cast<int>(st.top());
float c = 10.0;
st.push(c);
}
虽然它工作得很好,但我想在从堆栈中检索项目时避免显式类型转换。我希望以某种方式堆栈应该在根据项目的类型自动进行类型转换后返回项目。
我打算用堆栈维护一个哈希图,它可以存储每个元素的类型信息,并且可以用于在返回之前对每个项目进行类型转换,但我无法将其编写为代码。请给我一些可能的方法。
【问题讨论】:
-
让你的堆栈成为一个模板类,就像其他 stl 一样,你可能会在不需要 boost.any 的情况下解决你的任务。
-
@user3159253:我认为也许 OP 希望能够将不同类型的项目放在同一个堆栈上。
标签: c++ generics boost stl stack