C++检查元素是否为std :: vector

Ale*_*der 1 c++ types vector

我想迭代一个向量并检查元素是否是向量或字符串.此外,我需要一种方法将不同的vecors传递给一个函数.像这样的东西:

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;
}
Run Code Online (Sandbox Code Playgroud)
  • 好吧,首先我需要知道如果vec [i]是std :: vector,我怎么能正确检查

  • 然后我需要知道如何定义函数的参数,以接受任何类型的(多维)向量

Pub*_*bby 6

std::vector只能包含一种类型 - 即Tin std::vector<T>,可以使用该成员访问value_type.

您可能正在寻找的是模板专业化:

template<typename T>
string toCustomString(std::vector<T> vec) {
    // general case
}

template<>
string toCustomString<std::string>(std::vector<std::string> vec) {
    // strings
}
Run Code Online (Sandbox Code Playgroud)

(如果你想在所有向量上部分专门化它,那么你需要将它提升到一个结构)

如果你真的想在向量中存储字符串和向量,那么看看Boost.Variant和Boost.Any