Hi Allen,

In Java, only push/pop can be used because objects are not automatically
destroyed at the end of the scope. For log4cxx, the
constructor/desctructor approach was probably added for convenience (to
be completely log4j compatible the constructor and destructor should
not even be public ;-) )

Looking into ndc.h, the push method is overloaded like

#if LOG4CXX_HAS_WCHAR_T
                static void push(const std::wstring& message);
#endif
                static void push(const std::string& message);

and I think this was simply missed for the constructor. Since
the constructor only calls push(), you can try if the attached
patch solves your issue.

Best Regards,

        Andreas

Conway Allen wrote:
With the 0.9.7 i've been writing NDC ndc(mystring) where mystring is some std::string or a const char*. I find that with the 0.9.8 I can't do that - the compiler tells me that the only constructor I can use is a copy constructor or one that takes a const LogString& which seems to be a basic_string<wchar_t> or something like that. It is possible, however to invoke NDC::push(mystring) but then you lose the advantage having the destructor popping what was pushed. Is this how things are meant to be?

--
Andreas Fester
mailto:[EMAIL PROTECTED]
WWW: http://littletux.homelinux.org
ICQ: 326674288
Index: include/log4cxx/ndc.h
===================================================================
RCS file: /home/cvspublic/logging-log4cxx/include/log4cxx/ndc.h,v
retrieving revision 1.15
diff -u -r1.15 ndc.h
--- include/log4cxx/ndc.h       4 May 2005 16:13:40 -0000       1.15
+++ include/log4cxx/ndc.h       21 Jul 2005 20:27:39 -0000
@@ -112,7 +112,11 @@
         public:
                 typedef std::stack<DiagnosticContext> Stack;
 
-                NDC(const LogString& message);
+#if LOG4CXX_HAS_WCHAR_T
+                NDC(const std::wstring& message);
+#endif
+                NDC(const std::string& message);
+
                 ~NDC();
 
                 /**
Index: src/ndc.cpp
===================================================================
RCS file: /home/cvspublic/logging-log4cxx/src/ndc.cpp,v
retrieving revision 1.15
diff -u -r1.15 ndc.cpp
--- src/ndc.cpp 11 Mar 2005 06:34:49 -0000      1.15
+++ src/ndc.cpp 21 Jul 2005 20:27:39 -0000
@@ -47,7 +47,14 @@
         return *this;
 }
 
-NDC::NDC(const LogString& message)
+#if LOG4CXX_HAS_WCHAR_T
+NDC::NDC(const std::wstring& message)
+{
+        push(message);
+}
+#endif
+
+NDC::NDC(const std::string& message)
 {
         push(message);
 }
  • 0.9.8 - NDC Conway Allen
    • Re: 0.9.8 - NDC Andreas Fester

Reply via email to