今天我尝试研究一些代码而且我坚持使用这条代码。
std::vector<std::string(SomeClassInterface::*)()> ListOfFnPointers;
这个std :: string构造函数的含义是什么?我经历了this,但我不知道它意味着什么。
它在代码中用作
if (!ListOfFnPointers.empty())
{
std::vector<std::string> StringList;
for (auto Fn : ListOfFnPointers)
{
StringList.push_back((pSomeClassObj->*Fn)());
}
...
}
pSomeClassObj->*Fn
做了什么?答案 0 :(得分:5)
它与std::string
构造函数无关。
std::string(SomeClassInterface::*)()
是pointer to member function的类型,成员函数属于类SomeClassInterface
,返回std::string
,不带参数。
->*
是pointer-to-member access operator(还有.*
)。 (pSomeClassObj->*Fn)()
将调用pSomeClassObj
上的成员函数,该函数应该是类型为SomeClassInterface*
的指针。
答案 1 :(得分:4)
它不是构造函数,它是一个指向函数的指针,没有返回std :: string的参数。
for (auto Fn : ListOfFnPointers)
{
StringList.push_back((pSomeClassObj->*Fn)());
}
上面的推回是有效的,因为(pSomeClassObj-&gt; * Fn)()是对这些函数的调用,结果是std :: string。
更新:
是函数指针的std :: vector的声明。每个函数都属于SomeClassInterface,不带参数并返回std :: string。
如果此代码(pSomeClassObj-&gt; * Fn)()调用对象pSomeClassObj的函数,其中Fn是指向此函数的指针和pSomeClassObj的成员。
答案 2 :(得分:3)
如果您使用C++11
,则可以编写如下代码:
using FunctionPointer = std::string (SomeClassInterface::*) ();
std::vector<FunctionPointer> ListOfFnPointers;
您可以阅读以下链接:http://en.cppreference.com/w/cpp/language/type_alias