#define EXPORT(x) x {} namespace NSA { class ClassA { private: class Private { public: Private(); virtual ~Private(); void privmethod1(int); void privmethod2(int); }; Private* p; class Internal { public: Internal(); virtual ~Internal(); void internal_method1(char); void internal_method2(char); }; Internal* i; public: ClassA(); virtual ~ClassA(); virtual void generate_vt(const char*) const; }; EXPORT(ClassA::Private::Private()); EXPORT(ClassA::Private::~Private()); EXPORT(void ClassA::Private::privmethod1(int)); EXPORT(void ClassA::Private::privmethod2(int)); EXPORT(ClassA::Internal::Internal()); EXPORT(ClassA::Internal::~Internal()); EXPORT(void ClassA::Internal::internal_method1(char)); EXPORT(void ClassA::Internal::internal_method2(char)); EXPORT(ClassA::ClassA()); EXPORT(ClassA::~ClassA()); EXPORT(void ClassA::generate_vt(const char*) const); }; class ClassB { public: ClassB(); virtual ~ClassB(); virtual void generate_vt(const char*) const; }; EXPORT(ClassB::ClassB()); EXPORT(ClassB::~ClassB()); EXPORT(void ClassB::generate_vt(const char*) const); class ClassC { public: ClassC(); virtual ~ClassC(); virtual void generate_vt(const char*) const; }; EXPORT(ClassC::ClassC()); EXPORT(ClassC::~ClassC()); EXPORT(void ClassC::generate_vt(const char*) const); namespace NSB { class ClassD : public NSA::ClassA, public ClassB, public ClassC { public: ClassD(); virtual ~ClassD(); virtual void generate_vt(const char*) const; }; EXPORT(ClassD::ClassD()); EXPORT(ClassD::~ClassD()); EXPORT(void ClassD::generate_vt(const char*) const); class Wildcard { public: Wildcard(); ~Wildcard(); void wildcard_method1(); void wildcard_method2(); }; EXPORT(Wildcard::Wildcard()); EXPORT(Wildcard::~Wildcard()); EXPORT(void Wildcard::wildcard_method1()); EXPORT(void Wildcard::wildcard_method2()); };