使向量的类型任意



我目前正在c++17中实现一个简单的堆栈,它必须有一个toString-方法,可以处理以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

最新更新