В настоящее время я работаю над библиотекой отчетов как частью большого проекта. Он содержит набор функций ведения журнала и системных сообщений. Я пытаюсь использовать макросы препроцессора, чтобы вырезать подмножество вызовов функций, которые предназначены исключительно для отладки, а также определения и реализации функций сами по себе, используя условную компиляцию и функцию, такие как макросы, определенные ничем (подобно тому, как звонки assert()
удаляются, если определено DEBUG
). У меня проблема. Я предпочитаю полностью квалифицировать пространства имен, я считаю, что он улучшает читаемость; и у меня есть мои функции отчетности, завернутые в пространство имен. Поскольку символ двоеточия не может быть частью маркера макроса, я не могу включить пространство имен в разделение вызовов функций. Если бы я самостоятельно определял функции, я получаю Namespace::
. Я рассмотрел только использование условной компиляции для блокировки функционального кода для этих функций, но я обеспокоен тем, что компилятор может не грамотно оптимизировать пустые функции.Исключительные вызовы функций на основе препроцессора с именами функций
namespace Reporting
{
const extern std::string logFileName;
void Report(std::string msg);
void Report(std::string msg, std::string msgLogAdd);
void Log(std::string msg);
void Message(std::string msg);
#ifdef DEBUG
void Debug_Log(std::string message);
void Debug_Message(std::string message);
void Debug_Report(std::string message);
void Debug_Assert(bool test, std::string message);
#else
#define Debug_Log(x);
#define Debug_Message(x);
#define Debug_Report(x);
#define Debug_Assert(x);
#endif
};
Любая идея о том, как бороться с классификаторами пространства имен с препроцессором?
Мысли о, проблемы с удалением кода функции?
Любые другие способы достижения моей цели?
Вы можете использовать условную компиляцию, чтобы полностью удалить функции. – 2010-08-11 08:48:43
Можете ли вы дать нам пример кода того, что вы пытаетесь сделать? Мне сложно представить вашу проблему из текстового описания. –