我需要从使用void foo(const base &)
编译的libfoo.a
致电-fno-rtti
。我需要传递child
所需的base
类来覆盖虚拟成员函数,这个child
类必须存在于编译设置中,因为其他要求必须启用RTTI,但是如果链接器抛出那个:
未定义引用`typeinfo for base`
我是否仅仅通过base
来访问`typeinfo for base`?有没有办法在这种情况下进行?如何?
答案 0 :(得分:0)
如果您可以将非rtti对象声明为rtti对象的成员,则有一种可能性是创建第3个辅助类以在rtti和非rtti类之间进行转换。
class child;
/* RttiHelper compiled WITHOUT RTTI support */
class RttiHelper: public base {
public:
child &child_;
RttiHelper(const child &c): child_(c) { }
virtual int basefunc() override;
// ...
};
/* child compiled WITH RTTI support */
class child {
public:
RttiHelper base_;
child(): base_(*this) { }
virtual int basefunc() { /* ... */ }
void otherfunc(int x) { base_(x); } // example call of non-virtual base class method
};
// implementation of RttiHelper relay functions needs to come after child class is defined
inline int RttiHelper::basefunc() { return child_.basefunc(); }