c++ - 检查容器类型

标签 c++ list vector typeid typeinfo

如何检查容器类型? IE。

template <class Container1>
void func (Container1 &cont_1)
{
  if (cont_1 is list container)
    //do stuff
  if (cont_1 is vector container)    
    //do other stuff
}

我仅有的两种可能性是列表和 vector 。请注意,我不知道 list 中值的类型/vector ,即 vector<char>vector<int>等是可能的,因此我只想获取获取 vector 或列表的信息。 我遇到了typeidtype info , 但并没有真正完成。

最佳答案

您可以使用函数重载来实现:

template<typename T>
void func(std::vector<T>& vec)
{
    //Do something with vector
}

template<typename T>
void func(std::list<T>& list)
{
    //Do something with list
}

或者使用 typeid,这可能不太理想,因为两种情况下的代码都必须为 std::vectorstd 编译::list,因为模板在编​​译时是已知的,即使分支可能不会在 std::list 上执行,编译器此时也不知道这一点,并且因此它将无法编译,试图在 std::list 上应用 std::vector 操作。

template<template<typename, typename> class C, typename T, typename Alloc>
void func(C<T, Alloc>& container)
{
    if (typeid(container).hash_code() == typeid(std::vector<T, Alloc>&).hash_code())
        ; //Do something with vector
    else if (typeid(container).hash_code() == typeid(std::list<T, Alloc>&).hash_code())
        ; //Do something with list
}

关于c++ - 检查容器类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039729/

相关文章:

c++ - 给定相同数据结构的两个迭代器,如何检查哪个迭代器在另一个之前?

c++ - 提示用户时文件中的数据未正确显示

Java - 不同的对象列表

Java vector : How to find out the would-be index of an item

c++ - 写入多维 vector 的子元素内的元素是线程安全的吗?

c++ - 设置一个等于 369 的字符给出与 113 相同的二进制模式是 UB 行为吗?

python - 如何访问对列表中对的每个元素?

创建与 C 中另一个列表大小相同的结构列表

struct init 的 C++ vector

c++ - 尝试访问二维 vector 元素时出现段错误