X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9356b709aa15b5304f9fcae7313bc90c451fc4c6..99d82720737ebf91d3a387d53dd0cf6c8cf9a643:/include/wx/strvararg.h diff --git a/include/wx/strvararg.h b/include/wx/strvararg.h index e60392d2f7..ed16e5ed90 100644 --- a/include/wx/strvararg.h +++ b/include/wx/strvararg.h @@ -124,11 +124,6 @@ class WXDLLIMPEXP_FWD_BASE wxString; // accounts for string changes done by wxArgNormalizer<> // // Note that this class can _only_ be used for function arguments! -#ifdef __VISUALC__ - // "struct 'wx[W]CharBuffer' needs to have dll-interface to be used by - // clients of class 'wxString'" - this is private, we don't care - #pragma warning (disable:4251) -#endif class WXDLLIMPEXP_BASE wxFormatString { public: @@ -159,11 +154,15 @@ public: // n-th variadic argument desired representation ArgumentType GetArgumentType(unsigned n) const; + // returns the value passed to ctor, only converted to wxString, similarly + // to other InputAsXXX() methods + wxString InputAsString() const; + #if !wxUSE_UNICODE_WCHAR operator const char*() const - { return wx_const_cast(wxFormatString*, this)->AsChar(); } + { return const_cast(this)->AsChar(); } private: - // InputAsChar() returns the value converted passed to ctor, only converted + // InputAsChar() returns the value passed to ctor, only converted // to char, while AsChar() takes the the string returned by InputAsChar() // and does format string conversion on it as well (and similarly for // ..AsWChar() below) @@ -175,7 +174,7 @@ private: #if wxUSE_UNICODE && !wxUSE_UTF8_LOCALE_ONLY public: operator const wchar_t*() const - { return wx_const_cast(wxFormatString*, this)->AsWChar(); } + { return const_cast(this)->AsWChar(); } private: const wchar_t* InputAsWChar(); const wchar_t* AsWChar(); @@ -185,9 +184,6 @@ private: private: wxCharBuffer m_char; wxWCharBuffer m_wchar; -#ifdef __VISUALC__ - #pragma warning (default:4251) -#endif // NB: we can use a pointer here, because wxFormatString is only used // as function argument, so it has shorter life than the string @@ -235,10 +231,21 @@ struct wxFormatStringArgumentFinder template<> struct wxFormatStringArgumentFinder -{ - static wxFormatStringArgument find(const wxFormatString& arg) - { return wxFormatStringArgument(&arg); } -}; + : public wxFormatStringArgumentFinder {}; + +// avoid passing big objects by value to wxFormatStringArgumentFinder::find() +// (and especially wx[W]CharBuffer with its auto_ptr<> style semantics!): +template<> +struct wxFormatStringArgumentFinder + : public wxFormatStringArgumentFinder {}; + +template<> +struct wxFormatStringArgumentFinder + : public wxFormatStringArgumentFinder {}; + +template<> +struct wxFormatStringArgumentFinder + : public wxFormatStringArgumentFinder {}; // ---------------------------------------------------------------------------- @@ -561,7 +568,7 @@ struct wxArgNormalizerNarrowChar // FIXME-UTF8: which one is better default in absence of fmt string // (i.e. when used like e.g. Foo("foo", "bar", 'c', NULL)? if ( !fmt || fmt->GetArgumentType(index) == wxFormatString::Arg_Char ) - m_value = wxUniChar(value).GetValue(); + m_value = wx_truncate_cast(T, wxUniChar(value).GetValue()); else m_value = value; }