这个 std::string 构造函数是什么意思

what is the meaning of this std::string constructor

今天我试图研究一段代码,但我被这一行卡住了。

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)());
    }
    ...
}
  1. 声明是什么意思?
  2. 这个函数究竟用 pSomeClassObj->*Fn 做什么?

std::string构造函数无关

std::string(SomeClassInterface::*)()pointer to member function的类型,属于classSomeClassInterface、returnsstd::string的成员函数,不带参数。

->*pointer-to-member access operator(还有 .*)。 (pSomeClassObj->*Fn)() 将调用 pSomeClassObj 上的成员函数,它应该是类型为 SomeClassInterface*.

的指针

它不是构造函数,它是指向不带参数的函数的指针 returning std::string。

for (auto Fn : ListOfFnPointers)
{
    StringList.push_back((pSomeClassObj->*Fn)());
}

以上推回有效,因为 (pSomeClassObj->*Fn)() 是对这些函数的调用,结果是 std::string。

更新:

  1. 是std::vector函数指针的声明。每个函数都属于 SomeClassInterface,不带参数并且 return std::string.

  2. 在此代码的情况下 (pSomeClassObj->*Fn)() 调用对象 pSomeClassObj 的函数,其中 Fn 是指向此函数的指针和 pSomeClassObj 的成员。

如果你使用C++11,你可以这样写代码:

using FunctionPointer = std::string (SomeClassInterface::*) ();
std::vector<FunctionPointer> ListOfFnPointers;

你可以阅读这个link:http://en.cppreference.com/w/cpp/language/type_alias