1

ポインターを介してアクセスする関数のポインターを取得するのに問題があります。

double *d = &(this->c1->...->myFunc();

myFunc()として宣言されていますdouble。これを行う方法はありますか?

4

2 に答える 2

6

によって返される値へのポインターが必要な場合はmyFunc、それはできません。これは一時的なものであり、式の最後で破棄されます。

ポインターが必要な場合は、一時的でない値もポイントする必要があります。

double value = this->c1->...->myFunc();
double * d = &value;

それとも、関数へのポインターが必要だと言っていますか? それは とは異なるタイプdouble*です:

// get a member-function pointer like this
double (SomeClass::*d)() = &SomeClass::myFunc;

// call it like this
double value = (this->c1->...->*d)();

それとも、単純な関数のように呼び出すことができるが、何らかのオブジェクトにバインドしたいということですthis->c1->...か? 言語はそれを直接サポートしていませんが、C++11 にはラムダとbindその種の関数があります。

// Bind a function to some arguments like this
auto d = std::bind(&SomeClass::myFunc, this->c1->...);

// Or use a lambda to capture the object to call the member function on
auto d = [](){return this->c1->...->myFunc();};

// call it like this
double value = d();
于 2013-02-01T14:14:36.070 に答える
1

this->c1->c2->c3->myFunc()c3 のタイプが であるとしfooます。

class foo 
{
public:
  double myFunc();
};

次に、次のように言うことができます。

typedef double (foo::*pmyfunc)(void);

次に、そのアドレスを取得します。

pmyfunc addr = &foo::myFunc;

メンバー関数の FAQへのポインターを読む必要があります。

于 2013-02-01T14:20:29.753 に答える