Вопрос

class logger {
 ....
};

logger& operator<<(logger& log, const std::string& str)
{
    cout << "My Log: " << str << endl;
    return log;
}

logger log;
log << "Lexicon Starting";

Работает нормально, но вместо этого я хотел бы использовать указатель на экземпляр класса. то есть.

logger * log = new log();
log << "Lexicon Starting";

Возможно ли это? Если так, то каков синтаксис? Благодаря

Изменить. Ошибка компилятора:

error: invalid operands of types 'logger*' and 'const char [17]' to binary 'operator<<'
Это было полезно?

Решение

Вы должны разыменовать указатель на свой объект регистратора и, очевидно, проверить, не равен ли он 0. Что-то вроде этого должно сделать эту работу:


  log && ((*log) << "Lexicon starting")

В общем, я бы избегал ссылаться на объекты, такие как регистратор (который вы обычно безоговорочно ожидаете присутствовать) через указатель из-за неопределенности, которую вы получаете с указателем, AKA есть объект или нет?

Другие советы

Вот способ:

logger * log = new log();
(*log) << "Lexicon Starting";

Почему бы не использовать ссылку?

logger & log = *(new log()); 
// the above is abhorrent code that 
// should be replaced by something meaningful

log << "Lexicon Starting";

если это не то, что вы хотите, я бы пошел с Тимо Джеуш , даже если это некрасиво

В зависимости от контекста, из которого вы получаете регистратор, вы можете захотеть вернуть ссылку вместо указателя:

...
Logger& logger() {
    return *_pLogger;
}
...

Logger& log = logger();
log << "...";

Не совсем. new log () имеет тип указателя, " Lexicon стартовый " имеет тип const char [16] . Вы можете перегружать операторы, только если хотя бы один аргумент имеет пользовательский тип.

decasteljau правильно заметил, что вы можете сделать это через (* log) , если вам нужен указатель. Мне не нравится указатель, однако. Андрей Александреску посвящает немало страниц, посвященных интеллектуальным регистраторам в «Современном C ++ Design», возможно, стоит посоветоваться с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top