我目前已经定义了一个函数指针,对我而言似乎该函数与定义相匹配,但是我收到错误:
1 IntelliSense:类型" std :: string(RSSCrawler :: )(const web :: json :: value& headlines)"不能分配给" std :: string()类型的实体(const web :: json :: value& headlines)"
我不确定有什么问题,但这是我的代码
string(*GetHeadline)(const value&headlines);
GetHeadline = Extract;
string RSSCrawler::Extract(const value &headlines)
{
return "";
}
答案 0 :(得分:2)
编译器用类型不匹配错误解释了这一点,并显示了第一组括号中的差异。您需要成员函数指针。这是一个与'plain'/ free函数指针分开的类型。 (static
成员函数在这个意义上就像自由函数一样,但这不是你所拥有的。)
你可以找到很多关于这些的教程,但这里有一个快速参考。 (我必须克制自己不要将这些函数和变量名称去大写,因为它看起来不对,即使没有SO的自动格式化。)
// 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 .*
或者你可以这样做来获得一个const
初始化指针,虽然我认为除了const
之外就失去了函数指针的用途 - 将它们声明为其他的参数时的正确性功能......
std::string (RssCrawler::*const GetHeadline)(const value&) {
&RssCrawler::Extract
}