Здравствуйте, помогите пожалуйста,укажите на ошибки при реализации тассировки. Не могу понять принцип работы #ifdef
, #else
и #define
.
Реализую класс Trace.h
с шаблонным методом для записи. В нем же реализую мои макросы. Подскажите пожалуйста , на том ли я пути стою?
Файл TRACE.txt
лежит там же что и исполнимый файл.
Итог: ничего не записывает в файл.
Думаю, что ошибка в определении макросов.
Код:
(Trace.h)
#include <iostream>
#include <fstream>
class Trace
{
public:
Trace()
{
std::ofstream TraceFileWrite("TRACE.txt");
}
template <class T>
void writingData(T object)
{
TraceFileWrite << T;
}
~Trace()
{
// TraceFileWrite.close();
}
};
#ifdef Enabled_Trace
#define Enabled_Trace(object) writingData(object)
#else
#define Enabled_Trace(object)
#endif
(Source.cpp)
#include "Trace.h"
#include <iostream>
#include <string>
int main()
{
int a=7;
double b=93.09432;
std::string str("Hello");
Enabled_Trace(a)
Enabled_Trace(b)
Enabled_Trace(str)
std::cout<<"Hello Trace!"<<std::endl;
system("pause");
return 0;
}
Я думаю, вы хотели сделать нечто вроде этого:
#include <iostream>
#include <fstream>
#include <string>
#define Enable_Trace
#if defined(Enable_Trace)
class Trace
{
public:
static Trace& tracer()
{
static Trace t;
return t;
}
template <class T>
void writingData(const T& object)
{
TraceFileWrite << object;
}
private:
Trace()
{
TraceFileWrite.open("TRACE.txt");
// Проверки, что открыт
}
~Trace()
{
TraceFileWrite.close();
}
std::ofstream TraceFileWrite;
};
#define doTrace(x) { Trace::tracer().writingData(#x" = "); \
Trace::tracer().writingData((x)); \
Trace::tracer().writingData("\n"); }
#else
#define doTrace(x)
#endif
int main()
{
int a=7;
double b=93.09432;
std::string str("Hello");
doTrace(a);
doTrace(b);
doTrace(str);
std::cout<<"Hello Trace!"<<std::endl;
system("pause");
return 0;
}
Надеюсь, вы разберетесь, как и что тут работает, и по файлам разнесете. Вкратце - если Enable_Trace
определен - есть класс Trace
и определен макрос для его использования. Класс - синглтон (файл трассировки единственный).
Добавлю только, что я бы, пожалуй, не затирал файл трассировки, а делал его дописываемым.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени сутокСпособов несколько знаю, вот к примеру:
Есть класс наследник QWidget, у которого есть виртуальный метод updateStyle()Данный метод должен срабатывать при получение QEvent::StyleChange и один раз при...
Нужно не большое по весу решение, то есть Хсоde не подойдет, для компиляции С++ кода на MacЕсть какие-нибудь идеи?
Слышал, что если делать в вектор push_back, то если у него не хватает внутреннего буфера, то он увеличивается в 15 раза