У меня есть пользовательский класс под названием потокНастройка станд :: io_base флаги для пользовательского потока класса
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; }
от того, что я понимаю, потому что станд :: шестигранной возвращает зЬй :: ios_base поэтому он должен назвать это и установить флаг потоков. Но он всегда вызывает шаблон. Примечание. Если я удалю этот шаблон, все будет так же хорошо, как и следовало ожидать, но есть ли способ иметь и то и другое?
Пожалуйста, не стесняйтесь спрашивать дальше, если вам нужно больше разъяснений
Просто чтобы прояснить немного больше, что я пытаюсь это сделать ** ios_base ** перегруженный оператор важно над шаблоном. Я считаю, что это очень странное поведение, так как шаблоны следует ставить в крайнем случае, если во время компиляции его нельзя было бы разрешить другим типом. и я считаю, что std-библиотека связана перед всеми другими библиотеками. – abumusamq
Кстати, даже если я возвращаю 'std :: ios_base &' и возвращать поток, это не делает работу, я имею в виду, что она все еще вызывает шаблон над типизированной перегрузкой – abumusamq