Может кто-нибудь предложить способ иметь нульstd::ostringstream
что избегает делать какие-либо работы по параметрам, передаваемым ему с <<
?Реализация не-оп зЬй :: ostringstream, который может быть принят в качестве ссылки станд :: ostringstream
Есть два соответствующих сообщений здесь Implementing a no-op std::ostream и Printing to nowhere with ostream, до сих пор наиболее перспективным решением является https://stackoverflow.com/a/760353/826203, но в то время как тест он
int main() {
onullstream os;
os << 666;
// std::ostringstream & oss = os; // error C2440: 'initializing' : cannot convert from 'onullstream' to 'std::ostringstream &'
oss << "hello, world";
}
однако, это может быть использовано только как os<<666
, но может не быть используется как std::ostringstream &
. в любом случае?
Вы получаете сообщение об ошибке, потому что 'станд :: ostringstream' и' onullstream' различные части дерево наследования. Хотя оба они наследуются от 'std :: ostream', они иначе не связаны. Вместо этого я считаю, что требование использовать 'std :: ostringstream' здесь является ложным требованием, что вам действительно не нужно. Например, если у вас есть функция, которую вы вызываете с потоком, вам понадобится ссылка 'std :: ostream'. Затем вы можете передать объект 'std :: ostringstream' * или * объект' onullstream'. –