[英]How to get element type from STL container instance?
我知道value_type,key_type ......但它们是在类型上运行,而不是在实例上运行。 我试过像这样的东西:
std::set<uint64_t> mySet;
decltype (mySet)::value_type pos;
但它不起作用。
编辑:我使用VS 2010。
EDIT2:这段代码的目的是得到一个类型来赋予它boost :: lexical_cast <>是否有一个解决方法可以实现? 我想要这样的东西:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
// it is a iterator in vector of strings
编辑3:这有效:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
decltype (mySet)::value_type
是正确的。 确保在编译器中启用了C ++ 11模式。 如果你有,那么这是一个编译器错误。
可能的解决方法涉及使用标识元函数:
template <typename T>
struct identity { typedef T type; };
identity<decltype(mySet)>::type::value_type pos;
我会以相反的方式做到这一点:
typedef std::set<uint_least64_t> set_type;
set_type mySet;
set_type::value_type pos;
以下是打印优先级队列元素的print方法的简单示例:
template<typename T> void print_queue(T& queue) {
while (!queue.empty()) {
std::cout << queue.top() << " ";
queue.pop();
}
std::cout << '\n';
}
问题是,在打印所有元素之后,队列是空的。 要将队列恢复到原始状态,我们添加了矢量容器。 队列元素的类型是从队列中推导出来的:
template<typename T> void print_queue(T& queue) {
std::vector<T::value_type> vec;
while (!queue.empty()) {
std::cout << queue.top() << " ";
vec.push_back(queue.top());
queue.pop();
}
std::cout << '\n';
for (auto & v : vec) {
queue.push(v);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.