Следующее не скомпилирует для меня.У меня нет идей ... Любая помощь?
template<>
inline
std::ostream& operator<< <const std::map<std::string, std::string> > (std::ostream& stream, const std::map<std::string, std::string>& some_map)
{
return stream;
}
g ++ выдает мне следующую ошибку:
ошибка: ожидаемый инициализатор перед маркером '<' </strong>
Редактировать: 1 Хорошо, так как все говорят, что я перегружаюсь, приведу пример, который не имеет смысла для перегрузки.Что, если у меня есть это:
template <typename T>
inline
std::ostream& operator<<(std::ostream& stream, const T& something)
{
stream << something.toString();
return stream;
}
class Foo
{
public:
Foo(std::string s)
{
name = s;
}
std::string toString() const
{
return name;
}
private:
std::string name;
};
class Bar
{
public:
Bar(int i)
{
val = i;
}
std::string toString() const
{
std::ostringstream stream;
stream << val;
return stream.str();
}
private:
int val;
};
int main(int, char**)
{
Foo foo("hey");
Bar bar(2);
std::cout << foo << std::endl;
std::cout << bar << std::endl;
return 0;
}
Теперь это тоже не сработает.
Я просто хочу избежать перегрузки оператора << снова и снова, используя шаблон, как указано выше.Кажется, это должно быть возможно.Я хотел бы знать, если это так, и если да, то как? </p>
В таком сценарии перегрузка для Foo и Bar для выполнения одной и той же вещи будет пустой тратой, поэтому я стараюсь избегатьэто.
Редактировать: 2 Хорошо, похоже, меня неправильно поняли.Вот еще одна попытка уточнить:
template <typename T>
std::ostream& operator<<(ostream& stream, const T& t)
{
for(typename T::const_iterator i = t.begin(), end = t.end(); i != end; ++i)
{
stream << *i;
}
return stream;
}
int main(int, char**)
{
set<int> foo;
list<string> bar;
vector<double> baz;
cout << foo << " " bar << " " << baz << endl;
};
Приведенный выше код не сработает.Жалуется на неоднозначность.Но, похоже, лучшее решение для распечатки контейнеров.Если бы я делал это с перегрузкой, мне нужно было бы написать версию оператора << для каждой комбинации контейнер / тип данных, что привело бы к смешному количеству дублирования кода. </p>