メンバ関数へのポインタであるメンバが必要です。次に、このポインタを他のメンバ関数の1つを指すように設定し、それを使って本当に必要な関数を呼び出します。基本的には、関数を実装するさまざまな方法があり、適切な関数を呼び出すポインタを設定したいと考えています。また、クラスはテンプレートクラスです。C++メンバ関数へのポインタ、メンバ
関数ポインタを介して関数を呼び出す方法が見つかりません。たとえば は:
template <typename T> class C
{
public:
typedef void(C<T>::*Cfunc)(int);
Cfunc cf;
void p1(int i) {
}
C (int i)
{
cf = &C<T>::p1;
}
};
int main()
{
C<int> Try1(1);
(Try1.*C<int>::cf)(10);
return 0;
}
私はエラーを取得する:
tc.cpp: In function ‘int main()’:
tc.cpp:5:11: error: invalid use of non-static data member ‘C<int>::cf’
Cfunc cf;
^
tc.cpp:16:16: error: from this location
(Try1.*C<int>::cf)(10);
にアクセスするために
C
のインスタンスが必要あなたは本当にメンバ変数へのポインタが必要ですか? std :: functionとlambdaの間にはほとんど必要はありません。 –私はstd :: functionまたはlambdasで私の問題を解決する方法を知らない。私が望むのは、私が使用したい実装セットのどれを構築するかを設定できることです。ポインタを変更することで、オブジェクトの存続中にこれを動的に変更できるようにすることもできます。だから私の例では時にはcfがp1を指し、時には実装p2を指すこともあります。私は、電話の時点でif-then-elseを持つ必要があるというトラブルやオーバーヘッドを望んでいません。 – KevinD