У меня есть собственный класс Stream
class Stream
public:
Stream& operator<<(int i) { stream_ << i; return *this;}
template <typename CustomClass>
Stream& operator<<(const CustomClass& c) { stream_ << c.toString() /* assume this template always have toString(); return *this; }
private:
std::stringstream stream_;
};
Это очень простой пример того, что у меня есть на самом деле. И я пытаюсь установить флаги std::ios_base следующим образом:
Stream() << 1 << std::hex << 2;
с помощью оператора;
Stream& operator<<(std::ios_base& b) { stream_.setf(b.flags()); return *this; }
насколько я понимаю, потому что std::hex возвращает std::ios_base, поэтому он должен вызывать это и устанавливать флаг потоков. Но он всегда вызывает шаблон. Примечание. Если я удалю этот шаблон, все будет работать так же хорошо, как и следовало ожидать, но есть ли способ получить и то, и другое?
Пожалуйста, не стесняйтесь спрашивать, если вам нужно больше разъяснений
std::ios_base&
и верну поток, это не сделает работу, я имею в виду, что он все еще вызывает шаблон поверх типизированной перегрузки - person abumusamq   schedule 16.04.2013