0

コンパイラ (MinGW g++/Linux g++) がヘッダー ファイル内の定義済みのものを無視するようにしたい:

class A {
    public:
       A();
       virtual ~A();

    IGNORE void methodA(); // = 0 -> not possible
    IGNORE void methodB(); // = 0 -> not possible
}

問題: methodA() と methodB() は、クラスが後でインスタンス化されるため、純粋な仮想にすることはできず、コンパイラ エラーが発生します。それを行う理由: 読み取り可能なヘッダー ファイルが必要なため、このメソッドはファイルに表示する必要があります。メソッドは、マクロを使用して文字列として変換される「シグナル」として機能する QT フレームワークのようにのみ使用されます。注釈としてマクロを宣言することは可能でしょうか? QT5フレームワーク(宣言されたシグナルメソッド)でこれを見ましたが、コードでは機能しません...やりたくないこと:メソッドをDOCアノテーションとしてのみリストします。

それを解決する方法を考えてくれてありがとう;)

4

2 に答える 2

2
void methodA(int) = delete; // note: requires C++11
void methodA(double);

を使用しようとするとコンパイラ エラーが発生しますmethodA(int)が、使用しようとしている場合は発生しませんmethodA(double)

于 2013-10-25T17:13:19.340 に答える
0

私がやりたいことを説明したように、メソッドを無視する方法を見つけました:

#define IGNORE __attribute__((unused))
#define METHOD_TO_STRING(a) ""#a

ヘッダーファイルに書き込むことができるように

class A {
    public:
        IGNORE void methodA();

        void doStuff(const char *stuff);

        void methodB() {
            doStuff(METHOD_TO_STRING(methodA());
        }
};

これでコンパイラは満足し、メソッドを引数として渡すことができます:) ヒントをありがとう

于 2013-10-25T21:19:34.670 に答える