コンパイラは型の不一致エラーと括弧の最初のセットの違いを示すとともに、これを説明します。 メンバ関数ポインタが必要です。これは 'プレーン' /フリー関数ポインタとは別のタイプです。 (static
メンバー関数はこの意味でフリー関数のように振る舞いますが、それはあなたが持っているものではありません)
これらについては多くのチュートリアルがありますが、ここでは簡単なリファレンスがあります。しかし、
// Declare pointer-to-member-function of a given class and signature
std::string (RssCrawler::* GetHeadline)(const value&);
// Bind it to any method of the same class and signature
GetHeadline = &RssCrawler::Extract;
// Call it on a given instance of said class
std::cout << (someInstance.*GetHeadline)(someValue) << std::endl; // operator .*
(それだけでも、SOの自動フォーマットせずに、間違ったに見えたので、私は。これらの関数と変数名を解除大文字にしないように自分自身を抑制しなければならない)それとも、const
初期化ポインタを取得するためにこれを行うことができます私は
std::string (RssCrawler::*const GetHeadline)(const value&) {
&RssCrawler::Extract
}
平野の関数ポインタは、メンバ関数ポインタではありません... 他関数に引数としてそれらを宣言するときには、
const
-correctnessを除き、関数ポインタの目的に反しだと思います。後者を研究する。 –Extractはメンバ関数です。 GetHeadlineは非メンバ関数ポインタです。彼らは同じタイプではありません。 –
Exrtactが静的関数であれば動作するはずです。 GetHeadLine = RSSCrawler :: Extractを使用して関数ポインタを割り当てることができます。 – CODError