这个std :: string构造函数的含义是什么?

时间:2016-08-09 06:20:21

标签: c++ string c++11 stdstring

今天我尝试研究一些代码而且我坚持使用这条代码。

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做了什么?

3 个答案:

答案 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。

更新:

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

  2. 如果此代码(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