这个 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)());
}
...
}
- 声明是什么意思?
- 这个函数究竟用
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。
更新:
是std::vector函数指针的声明。每个函数都属于 SomeClassInterface,不带参数并且 return std::string.
在此代码的情况下 (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
今天我试图研究一段代码,但我被这一行卡住了。
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
做什么?
与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。
更新:
是std::vector函数指针的声明。每个函数都属于 SomeClassInterface,不带参数并且 return std::string.
在此代码的情况下 (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