使向量类型任意

Make type of vector arbitrary

我目前正在用 c++17 实现一个简单的堆栈,它必须有一个 toString-Method,可以处理以 std::vector 作为模板类型的其他类型。

我最初的问题是,std::to_string 不能接受向量,我在正常实现之上添加了一个专门的向量实现:

template <class T> std::string SweCpp::Stack<T>::toString()
{
    std::string result = "SweCpp::Stack[";

    for (int a = 0; a < top + 1; a++)
    {
        T element = st[a];

        result += std::to_string(element);

        if (a != top) {
            result += ", ";
        }
    }
    result += "]";
    return result;
}


template <> std::string SweCpp::Stack<std::vector<double>>::toString() {
    std::string result = "SweCpp::Stack[";

    for (int a = 0; a < top + 1; a++)
    {
        std::vector<double> element = st[a];

        std::string vecAsString = "Vector{";
        for (double value : element) {
            vecAsString += std::to_string(value) + ",";
        }
        vecAsString += "}";

        result += vecAsString;
        if (a != top) {
            result += ", ";
        }
    }
    result += "]";
    return result;
}

想法是为向量的每个元素调用 to_string,并构建一个类似的字符串。问题是,我不知道如何使 double 任意。我该如何实现它,以便我可以传递任何类型的向量,例如std::vector<int>std::vector<std::string>?

大概是这样的:

template <typename T>
std::string MyToString(const T& val) {
  return std::to_string(val);
}

template <typename T>
std::string MyToString(const std::vector<T>& vec) {
  std::string vecAsString = "Vector{";
  for (const auto& value : vec) {
    vecAsString += MyToString(value) + ",";
  }
  vecAsString += "}";
  return vecAsString;
}

现在像您的第一个示例一样实现 Stack<T>::toString(),但是调用 MyToString 代替 std::to_string