1

私は多くのプロジェクトで解決策を持っています。
配列と関数へのポインタを受け取る共通プロジェクト内にクラスを作成したいと思います。
このクラスは、そのソリューションの他のプロジェクトのメンバーです。各プロジェクト クラスはそれをメンバーとして保持できます。

common 内のクラスのコンストラクターで、関数のポインターを渡すにはどうすればよいですか? 後で呼び出したい関数の場所を保持する共通クラス内にメンバーを設定するにはどうすればよいですか?

私の目標は、ポインターを使用して関数を呼び出すことができることです-共通プロジェクトにあるクラスのコードにいる間..

ありがとう

4

1 に答える 1

2

common 内のクラスのコンストラクターで、関数のポインターを渡すにはどうすればよいですか? 後で呼び出したい関数の場所を保持する共通クラス内にメンバーを設定するにはどうすればよいですか?

typedef void(*FUNCPTR)(int);

これは私の関数ポインタ型を定義しますが、関数を以下のシグネチャに制限します (void を返し、1 つの int パラメータを取ります)。関数シグネチャに対してこれを定義する必要があります。

void myFunction( int someParam )
{
    //DoSomething with someParam
}


class Foo
{
private:
    FUNCPTR mFunction; //Holds pointer

public:
    Foo( FUNCPTR function) : mFunction(function) {} //Initialise instance

    void callFunc() {mFunction(1);} //call function
};

int main(unsigned int argc, const char** argv)
{
    Foo myFoo(myFunction);

    myFoo.callFunc();
}

operator()ただし、C++ では、オブジェクトを作成し、正しいパラメーターと戻り値の型を取り、オブジェクトとポリモーフィズムのすべての柔軟性を可能にするオブジェクトを定義する関数オブジェクトを使用することを考えたほうがよいかもしれません....

いくつかの議論と詳細については、C++ ファンクターとその使用法を参照してください。

于 2012-11-26T14:12:33.477 に答える