[C++-sig] [boost.python] Can't import a wrapped template class

Stefan Seefeld stefan at seefeld.name
Fri Oct 26 22:27:51 CEST 2012


On 10/26/2012 04:15 PM, Paul O. Seidon wrote:

> Yes, I have to provide a TYPE to the tempate to enable the compiler to 
> generate code. Isn't 
>
> typedef _Variable<double>  VariableDouble;
>
> BOOST_PYTHON_MODULE(_varbls)
> {
>
>     class_<VariableDouble>("VariableDouble")
>         .def( init<>())
>         .def( init<const double&>())
>     ;
> }
>
> doing that?

The compiler can only generate code from templates it can see at the
point where the instantiation happens. Since in the snippet above it
doesn't see the _Variable constructor definition, it can't instantiate
it. And at the point where it can see the constructor, it doesn't know
that it needs to instantiate it for type 'double'.

The entire issue disappears if you move your member function definitions
(including the constructor) from varbls.cpp to varbls.h.

    Stefan

-- 

      ...ich hab' noch einen Koffer in Berlin...



More information about the Cplusplus-sig mailing list