|
Boost Users : |
From: Frank (opcode_at_[hidden])
Date: 2005-11-04 14:58:14
John Maddock <john <at> johnmaddock.co.uk> writes:
>
> > I 'm trying to put the implementation into a dll and mark the explicit
> > instantiation of Normal as exported with the following results:
> > 1) With the small_dim_ctor's enabled I get the static assertion when
> > marked for export
> > 2) With the small_dim_ctor's enabled everything is ok when not marked
> > for export
> > 3) With the small_dim_ctor's disabled everything is ok regardless of
> > export marking
> > 4) If I comment out the BOOST_STATIC_ASSERT and build my app with
> > export enabled I can use the resulting dll without any problems
> >
> > I'm thinking that marking for export is somewhow generating an
> > implicit conversion somewhere but I don't know how.
>
> Unfortunately, when you explicitly instantiate a template every non-template
> member function gets instantiated, and that triggers the static asserts.
>
> The only workarounds I can see are:
>
> 1) Use regular asserts whenever the class is being exported rather than
> static asserts.
> 2) Use partial template specialisations for the N = 1, 2 or 3 cases and give
> them different constructors (no need to static asserts then).
> 3) Use template constructors instead:
>
> template <class U>
> explicit Vector( U x )
> {
> BOOST_STATIC_ASSERT(DIM==1);
> data_[0]=x;
> }
>
> Hope this helps, John.
>
Soln 1) I was trying for compile time checks but will fall back to this
Soln 2) I understood partial specialization wasn't supported in VStudio but I
might do this for float, double and dim 1-4; I had started to do something
similar by deriving Vector3<T> template from Vector<T,DIM> when I ran into the
trouble.
Soln 3) I like this one but haven't made it work yet. It succeeds if I export
the specialized Vector<T,DIM>::Normal() but not if I export Vector3<T>::Normal
() but i'm working on it ;-)
Thanks for the help
Frank
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net