5

背景については、この質問を参照してください。

基本的に、クラスの次の定義があります

class  MyClass {
    virtual int foo4(double, int);
};

に解決される 2 つのシンボルを生成するようにコンパイラに指示する方法はありfoo4ますか? つまり、実行可能ファイルがダイナミック リンカに_ZN7MyClass4foo4Edi(シンボルのMyClass::foo4(double, int)) と他のシンボル (たとえば のシンボル)_ZN7MyClass9reserved1Evを解決するように要求した場合MyClass::reserved1()、ダイナミック リンカは両方を に解決することを望みます&MyClass::foo4(double, int)。Linux でかなり最新の GCC を使用しています。

4

2 に答える 2

3

gcc では、"alias" 属性を使用します。

int reserved1() __attribute__((alias ("_ZN7MyClass4foo4Edi")));

...しかし、これは(a)シンボルの定義と同じオブジェクトファイルでのみ機能すると信じているため、ユースケースに適しているかどうかはわかりません。こちらを参照してください。具体的には、仮想呼び出しの 1 つのバージョンのエイリアスにすぎず、サブクラスによって継承されることはありません。さらに、弱いシンボルの別名として使用することはできません。

于 2012-02-20T19:09:15.213 に答える
1

C ++では、次のようになります。

class  MyClass {
    int foo5(double, int) __attribute__((alias("_ZN7MyClass4foo4Edi")));
    virtual int foo4(double, int);
};

int MyClass::foo4(double d, int i)
{
}
于 2012-02-20T19:23:49.057 に答える