如何指示编译器为虚拟函数生成别名
How to instruct the compiler to generate an alias for a virtual function?
有关背景信息,请参阅此问题。
基本上,我对类有以下定义
class MyClass {
virtual int foo4(double, int);
};
有没有一种方法可以指示编译器生成两个解析为foo4
的符号?也就是说,我希望如果一个可执行文件要求动态链接器解析_ZN7MyClass4foo4Edi
(MyClass::foo4(double, int)
的符号)和其他一些符号(比如_ZN7MyClass9reserved1Ev
,MyClass::reserved1()
的符号),那么动态链接器会将两者都解析为&MyClass::foo4(double, int)
。我在Linux上使用相当现代的GCC。
在gcc中,使用"alias"属性。
int reserved1() __attribute__((alias ("_ZN7MyClass4foo4Edi")));
但我相信这只适用于与(a)符号定义相同的对象文件,所以我不确定它是否适合您的用例:请参阅此处。具体来说,它将只是虚拟调用的一个版本的别名,不会被子类继承;此外,您不能使用它来对弱符号进行别名。
在C++中,它看起来像这样:
class MyClass {
int foo5(double, int) __attribute__((alias("_ZN7MyClass4foo4Edi")));
virtual int foo4(double, int);
};
int MyClass::foo4(double d, int i)
{
}
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 如何在C++中伪造虚拟可变参数函数模板?
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 虚拟继承基构造函数消除
- "虚拟""覆盖"析构函数
- 类中的虚拟布尔函数参数不起作用
- 用纯虚拟函数兜圈子
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数"虚拟无效 QLabel::p aintEvent(QPaintEvent*)")
- 声明析构函数虚拟就足够了吗?
- 视觉 C++当我们在基类中使函数成为纯虚拟时,那么在子类中再次使相同的函数虚拟的必要性是什么
- 重载函数(虚拟/非虚拟)