如何从STL容器实例中获取元素类型
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
第三版:这个作品:
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;
下面是打印优先级队列元素的打印方法的一个简单示例:
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);
}
}
与其他答案的组合:
template<typename TVariant, typename Tfind>
struct is_variant_of {
template<typename T1, typename T2> struct var_unfold : public std::false_type {};
template<typename T1, typename... Tlist> struct var_unfold<T1, std::variant<Tlist...>>
{ constexpr static bool value = (std::is_same_v<T1, Tlist> || ...); };
constexpr static bool value = var_unfold<Tfind, TVariant>::value;
};
main() {
using TV = std::variant<int, double>;
static_assert(is_variant_of<TV, int>::value);
}
template struct var_unfold{}
通过部分专用化匹配std::variant<Ts...>
- 用c++17倍表达的
std::is_same_v
相关文章:
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- 从 c++ 中的链表中获取元素
- CPtrList - 如何获取元素的索引?
- 编译按映射类型获取元素的映射错误元组
- 如何在列表中获取元素的所有组合
- 通过 std::queue 中的元素的值获取元素的索引
- 如何从circular_buffer获取元素
- 反转偏移量/按偏移量获取元素的名称
- 如何在 c++ 中搜索向量并获取元素的位置
- 如何在 n 元树中获取元素
- 如何从STL容器实例中获取元素类型
- 使用成员函数top()从priority_queue获取元素
- c ++中是否有任何方法可以在随机访问的列表中获取元素
- 如何在嵌套向量中获取元素类型
- 如何获取元素的数量
- 我看不到从 std::queue 中获取元素的方法
- 获取元素在boost::multi_index_container的顺序索引中的位置
- PugiXML C++获取元素(或标记)的内容
- 如何从传递给STL算法的谓词中获取元素的索引
- 有没有一种方法可以从传递给排序的lambda中获取元素位置