Я стремлюсь (например) к строковому вектору векторов ... (с произвольно глубокой вложенностью).
Я пробовал следующее:
#include <iostream>
#include <sstream>
#include <vector>
template<typename E>
std::string toString(const E& element) {
std::ostringstream oss;
oss << element;
return oss.str();
}
template<typename E>
std::string toString<std::vector<E>>(const std::vector<E>& set) {
std::ostringstream oss;
oss << "{";
bool started = false;
for (const auto& el : set) {
if (started) {
oss << ",";
}
else {
started = true;
}
oss << toString(el);
}
oss << "}";
return oss.str();
}
int main()
{
std::vector<std::vector<int>> v{{1},{2,3}};
std::cout << toString(v) << std::endl; // want to output "{{1},{2,3}}"
return 0;
}
но это генерирует ошибку компилятора , поскольку частичная специализация шаблонной функции явно не разрешена. Как мне тогда делать такие вещи?