On Thu, Oct 24, 2002 at 10:07:33AM +0200, Jean-Marc Lasgouttes wrote:
> Just to satisfy my curiosity, would something like that work?

In most cases probably yes (if this is the only "user defined conversion"
involved).

> lyxstring::lyxstring(std::string const &str)
> {
>         //what should I put here? Can I call the char const * constructor?
> }

No, you have to copy the code or call some comon init() function.

> Of course, one has to #include <string> always to make it work, and
> this could be costly.

That's probably true.

> Would the following hack work?
> 
> template<class strclass>
> lyxstring::lyxstring(T const &str)
> {
>         // use str.c_str() here, which will break of course if T is not 
>         // std::string...
> }

Probably too permissive as this allows to convert any type to lyxstring...

Another way out would be to have a "stringfwd" much like the standard
"iosfwd".  g++ 3.1 uses such a thing internally as I have just noticed:

namespace std
{
  template<class _CharT>
    struct char_traits;

  template<> struct char_traits<char>;
#ifdef _GLIBCPP_USE_WCHAR_T
  template<> struct char_traits<wchar_t>;
#endif

  template<typename _Alloc>
    class allocator;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_string;

  typedef basic_string<char>    string;
  typedef basic_string<wchar_t> wstring;
}

Having such a header would benefit all over the place, especially the
inset bases would not need to include a 2000 line header (that made a
difference of more then 10% IIRC  last time I checked for mathed).

It would take a bit of configure magic to get this working across all
platforms.

Well. Using g++-v3/bits/stringfwd.h if available and <string>
everywhere else would do for starters...

Andre'

-- 
Those who desire to give up Freedom in order to gain Security,
will not have, nor do they deserve, either one. (T. Jefferson)

Reply via email to