#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
override;
};
EXPORT(ClassD::ClassD());
EXPORT(ClassD::~ClassD());
EXPORT(
void
ClassD::generate_vt(
const
char
*)
const
);
class
Symver {
public
:
Symver();
~Symver();
void
symver_method1();
void
symver_method2();
};
EXPORT(Symver::Symver());
EXPORT(Symver::~Symver());
EXPORT(
void
Symver::symver_method1());
EXPORT(
void
Symver::symver_method2());
class
SymverOptional {
public
:
SymverOptional();
~SymverOptional();
};
EXPORT(SymverOptional::SymverOptional());
EXPORT(SymverOptional::~SymverOptional());
};