我知道value_type,key_type ......但是它们对类型进行操作,而不是对实例进行操作。 我试过了 像这样的东西:
std::set<uint64_t> mySet;
decltype (mySet)::value_type pos;
但它不起作用。
编辑:我使用VS 2010.
EDIT2:这段代码的目的是获得一个类型来赋予它boost :: lexical_cast&lt;&gt; 是否有解决方案可以实现这一目标? 我想要这样的东西:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
// it is a iterator in vector of strings
EDIT3:这有效:
mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
答案 0 :(得分:16)
decltype (mySet)::value_type
是正确的。确保在编译器中启用了C ++ 11模式。如果你有,那么这是一个编译器错误。
可能的解决方法是使用身份元功能:
template <typename T>
struct identity { typedef T type; };
identity<decltype(mySet)>::type::value_type pos;
答案 1 :(得分:7)
我会反过来做这件事:
typedef std::set<uint_least64_t> set_type;
set_type mySet;
set_type::value_type pos;
答案 2 :(得分:0)
以下是打印优先级队列元素的打印方法的简单示例:
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);
}
}