Temel olarak, bu logger sınıfına ve önekleyiciye sahibim. gayet iyi çalışıyorBu kayıt düzeni nasıl geliştirilir (Birazcık daha fazla)
void SomeObject::SomeMethod()
{
Prepender(*p_Logger, __PRETTY_FUNCTION__);
//Do stuff
}
:
class Logger
{
public:
enum LogType
{
LT_DEBUG = 0,
LT_WARNING,
LT_ERROR,
LT_STAT,
LT_TEXT,
LT_INFO,
LT_OTHER,
LT_UNKNOWN
};
__attribute__((format(printf, 7, 8)))
virtual const char* EHLog(LogType, //LogType
bool, //Send to FE
int, //Error code
const char*, //File
int, //Line
const char*, //Format
...) = 0;
virtual void PushPrependString(const char*) = 0;
virtual void PopPrependString() = 0;
virtual ~Logger(){}
};
class Prepender
{
public:
Prepender(Logger& oLogger, const char* zPrependString)
:o_Logger(oLogger)
{
o_Logger.PushPrependString(zPrependString);
}
~Prepender()
{
o_Logger.PopPrependString();
}
private:
Prepender();
Prepender(const Prepender&);
Prepender& operator=(const Prepender&);
Logger& o_Logger;
};
Şimdi, herhangi bir günlüğü yapılır fonksiyonları, ben bunu.
Prepender
nesnesini el ile oturum açmaya gerek kalmadan el ile oluştururken bunu geliştirmenin bir yolu var mı? (Makrolar bile mi?) (Belki de imkansız olduğunu anlıyorum, başkalarının sahip olduğu fikirleri öğrenmek istiyorum).
DÜZENLEME: Yanlış fikirleri almak insanların çok Gördüğünüz gibi, ben ideal olarak bu yapmak istiyorum:
Bunu yapmanın başlıca motivasyon ben bir önek unutmayın emin olmaktırvoid SomeObject::SomeMethod()
{
//Prepender(*p_Logger, __PRETTY_FUNCTION__);
//Do stuff
//And the same results!!!
}
içinde kayıt yapıldığında işlev görür. Yapmış olsaydım, bildirilen işlev gerçek olandan bir seviye yukarı olacak.
Neyi başarmak istediğinizi belirtemez misiniz? İstemci kodunun nasıl görünmesini istersiniz? – Simone
@Simone: "Günlüğe kaydetmeye ihtiyacım olan bir" Prepender "nesnesinin oluşturulmasıyla bunu yapmanın bir yolu var mı?" ? – nakiya
Fikrimi değiştirdim: Bu yapılabilir :) – Simone