如何检查容器类型? 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 或列表的信息。
我遇到了typeid
和 type 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::vector
和 std 编译::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/