2016-08-09 13 views
5

Сегодня я попытался изучить часть кода, и я застрял в этой строке.В чем смысл этого конструктора std :: string

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?
+2

Подсказка: название 'ListOfFnPointers' важно. – juanchopanza

+0

Спасибо человек. Я никогда не думал о указателях функций. –

ответ

5

Это не имеет никакого отношения к конструктору std::string.

std::string(SomeClassInterface::*)() является типом pointer to member function, функция члена принадлежит к классу SomeClassInterface, возвращает std::string, не принимает никаких параметров.

->* является pointer-to-member access operator (а также .*). (pSomeClassObj->*Fn)() вызовет функцию-член на pSomeClassObj, которая должна быть указателем с типом SomeClassInterface*.

+0

большое спасибо. Теперь я ясно –

4

Это не конструктор, это указатель на функцию без параметров, возвращающих std :: string.

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

оттеснить это выше работают, потому что (pSomeClassObj -> * Fn)() является вызовом для этих функций и результат станд :: строка.

ОБНОВЛЕНО:

  1. Это декларация станд :: вектор указателей на функции. Каждая функция принадлежит SomeClassInterface, не принимает параметров и возвращает std :: string.

  2. В этом случае код (pSomeClassObj -> * Fn)() вызывает функцию объектов pSomeClassObj, где Fn является указателем на эту функцию и членом pSomeClassObj.

+0

большое вам спасибо. Теперь я ясно –

3

Если вы используете C++11, вы можете написать код так:

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

вы можете прочитать по этой ссылке: http://en.cppreference.com/w/cpp/language/type_alias

+0

спасибо за ввод C++ 11 –

 Смежные вопросы

  • Нет связанных вопросов^_^