我想遍历一个 vector 并检查元素是 vector 还是字符串。我还需要一种方法将不同的 vector 传递给一个函数。 像这样:
using namespace std;
string toCustomString(<some vector> vec) {
string ret = "";
for(size_t i = 0; i < vec.length(); ++i)
if (vec[i] == %vector%)
ret += toCustomString(vec[i]);
else //if type of vec[i] is string
ret += "foo"+vec[i]+"bar";
}
return ret;
}
好吧,首先我需要知道如何正确检查 vec[i] 是否为 std::vector
然后我需要知道如何定义函数的参数以接受任何类型的(多维) vector
最佳答案
std::vector
只能包含一种类型 - 即 T
在 std::vector<T>
, 可以通过成员(member) value_type
访问.
您可能正在寻找的是模板特化:
template<typename T>
string toCustomString(std::vector<T> vec) {
// general case
}
template<>
string toCustomString<std::string>(std::vector<std::string> vec) {
// strings
}
(如果你想在所有 vector 上部分特化它,那么你需要将它提升为一个结构)
如果你真的想在 vector 中存储字符串和 vector ,那么看看 Boost.Variant 和 Boost.Any
关于C++ 检查元素是否为 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957506/