stdout/cout из приложения, запущенного от спокойного создателя?

Думайте об этом с аспектно-ориентированной точки зрения; то, что Вы хотите сделать, действительно, знают все классы во времени выполнения, которые расширили класс Животных. (Я думаю, что это - немного более детальное описание Вашей проблемы, чем Ваш заголовок; иначе я не думаю, что у Вас есть вопрос во время выполнения.)

Поэтому то, что я думаю, что Вы хотите, должно создать конструктора Вашего базового класса (Животное), которое добавляет к Вашему статическому массиву (я предпочитаю ArrayLists, сам, но каждому их собственное) тип текущего Класса, который инстанцируют.

Так, примерно;

public abstract class Animal
    {
    private static ArrayList<Class> instantiatedDerivedTypes;
    public Animal() {
        Class derivedClass = this.getClass();
        if (!instantiatedDerivedClass.contains(derivedClass)) {
            instantiatedDerivedClass.Add(derivedClass);
        }
    }

, Конечно, Вам будет нужен статический конструктор на Животном для инициализации instantiatedDerivedClass... Я думаю, что это сделает то, что Вы, вероятно, хотите. Обратите внимание, что это зависимо от предшествующего пути развития выполнением; если у Вас будет класс Собаки, который происходит из Животного, которое никогда не вызывается, то у Вас не будет его в Вашем Списке учащихся Животных.

8
задан Community 23 May 2017 в 11:59
поделиться

3 ответа

qDebug () и связанные с ним функции удобны для такого рода вещей - будут отправлены в отладчик (если вы используете Qt Creator, он легко их подберет!)

#include <QDebug>

qDebug() << "x is: " << x;
14
ответ дан 5 December 2019 в 08:54
поделиться

Вы всегда можете запустить свои программы из командной строки, чтобы увидеть вывод stdout (cmd.exe). Также, как сказал Пол Диксон, с помощью qDebug () вы сможете увидеть вывод в отладчике.

#include <QDebug>
...
{
   ...
   int x = 5;
   qDebug() << "x is: " << x;
}
2
ответ дан 5 December 2019 в 08:54
поделиться

Один дешевый способ - просто повторно открыть stdout / err (ну, по крайней мере, в win32, я предполагаю, что он будет работать и с Qt)

#include <stdio>

//add this at the beginning of your main
freopen("c:\\temp\\stdout.txt","w",stdout);
freopen("c:\\temp\\stderr.txt","w",stderr);

Если вам нужна более серьезная трассировка / ведение журнала рассмотрите, например, log4cxx

2
ответ дан 5 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: