HI,

 

I’m working on exposing what should be a factory to create derived objects using the standard pattern for such a factory.  In short, I have something like the following:

 

Class Base {

    // some private member variables

 

Public:

    Virtual void Func1() =0;

    Virtual void Func2();

};

 

Class Derv1 : public Base {

    // override Func1()

    // override Func2()

 

};

 

Class BaseWrapper : public Base, boost::python::wrapper<Base> {

     Void Func1() {

         Get_override(“Func1”)();

    }

    Void Func2() {

        If(boost::python::override func = get_override(“Func2”))

        {

            Func();

            Return;

        }

        Base::Func2();

    }

};

 

Base* Factory(int selector) {

    // return derived classes base on selector

}

 

BOOST_PYTHON_MODULE(myMod) {

     Class_<Derv1, bases<Base> >(“Derived”)

        .def(“Func1”, &Derived::Func1)

        .def(“Func2”, &Derived::Func2)

    ;

 

    Class_<BaseWrapper, boost::noncopyable>(“BaseWrapper”)

        .def(“Func1”, pure_virtual(&Base::Func1))

        .def(“Func2”, &Base::Func2,  &BaseWrapper::Func2)

    ;

 

    Def(“Factory”, Factory);

}

 

 

Everything compiles now but I’m getting the following error:

 

RuntimeError: extension class wrapper for base class class Base has not been created yet

 

This comes when I try to import this module into the python interpreter.  What exactly am I missing?  I’m following instructions from here:

http://www.boost.org/doc/libs/1_48_0/libs/python/doc/tutorial/doc/html/python/exposing.html

 

Some references I’ve found from Google thus far suggest that the problem is with linking order.  However, how to specify linking order when that is determined dynamically during build?  (I’m using Visual Studio 2010)  Any help is greatly appreciated.

 

Thanks,

Andy