ポインターを介してアクセスする関数のポインターを取得するのに問題があります。
double *d = &(this->c1->...->myFunc();
myFunc()
として宣言されていますdouble
。これを行う方法はありますか?
ポインターを介してアクセスする関数のポインターを取得するのに問題があります。
double *d = &(this->c1->...->myFunc();
myFunc()
として宣言されていますdouble
。これを行う方法はありますか?
によって返される値へのポインターが必要な場合は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();
this->c1->c2->c3->myFunc()
c3 のタイプが であるとしfoo
ます。
class foo
{
public:
double myFunc();
};
次に、次のように言うことができます。
typedef double (foo::*pmyfunc)(void);
次に、そのアドレスを取得します。
pmyfunc addr = &foo::myFunc;
メンバー関数の FAQへのポインターを読む必要があります。