Hello. I'm working with boost::any and shared_ptr.
I'm implementing a plugin system which uses registration from .so files (under Linux).
The problem is that I have a factory function which returns boost::any. This boost::any
object holds a pointer type. The problem is that when I try to get the registered type back
to its real type through boost::any_cast, the cast always fails. If I register this type in
the same executable as
the application, everything is ok, and I can cast back to its real type.I have no idea why this happens:
template <class T>
struct ObjectFactory
{
boost::any operator()() const
{
typedef typename T::interface_type it;
it * t = new T();
return t;
}
};
#define REGISTER_EXTENSION_NODE(extensionpoint, ns) \
namespace { \
static const bool registeredextensionnode = \
::Gtk::Util::PluginsManager::instance().register_extension_node(#ns "::" #extensionpoint, \
::Gtk::Util::detail::ExtensionNodeFactory<ns::extensionpoint>()); \
}
These are the implied parts of my application. If I use the macro from a .so, it fails. If I use it from
the .exe, everything's ok. The registration part seems to work, I checked the size of the containers
and so on, and the elements were inserted. Any help how could I solve this?
I've been trying to debug the problem for almost 4 hours with no luck.