3

与えられたクラス

class C {
public:
    int f (const int& n) const { return 2*n; }
    int g (const int& n) const { return 3*n; }
};

このように関数ポインタpを定義できますC::f

int (C::*p) (const int&) const (&C::f);

の定義は、pを使用して分割できますtypedef

typedef int (C::*Cfp_t) (const int&) const;
Cfp_t p (&C::f);

(たとえば)pが変わらないようにするために、次のことができます。p = &C::g;

const Cfp_t p (&C::f);

さて、pこの場合の型は何でしょう?pそして、typedef を使用せずに の最後の定義をどのように達成するのでしょうか? typeid (p).name ()最も外側の const を区別できないことは承知しています。

int (__thiscall C::*)(int const &)const
4

1 に答える 1

7

変数の型はpですint (C::*const) (const int&) const。typedef なしで次のように定義できます。

int (C::*const p) (const int&) const = &C::f;

経験則は次のとおりです。定義しているオブジェクト/型を const にするにconstは、オブジェクト/型の名前の横にキーワードを置きます。したがって、次のこともできます。

typedef int (C::*const Cfp_t) (const int&) const;
Cfp_t p(&C::f);
p = &C::f; // error: assignment to const variable
于 2012-08-22T09:55:39.263 に答える