2016-08-09 9 views
5

का अर्थ क्या है आज मैंने कोड के कुछ टुकड़े का अध्ययन करने की कोशिश की और मैं इस लाइन से फंस गया हूं।इस std :: स्ट्रिंग कन्स्ट्रक्टर

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

इस std :: स्ट्रिंग कंस्ट्रक्टर का अर्थ क्या है? मैं this के माध्यम से गया लेकिन मुझे नहीं पता कि इसका क्या अर्थ है।

यह रूप में कोड में प्रयोग किया जाता है,

if (!ListOfFnPointers.empty()) 
{ 
    std::vector<std::string> StringList; 
    for (auto Fn : ListOfFnPointers) 
    { 
     StringList.push_back((pSomeClassObj->*Fn)()); 
    } 
    ... 
} 
  1. क्या है कि घोषणा का मतलब होता?
  2. यह फ़ंक्शन pSomeClassObj->*Fn के साथ वास्तव में क्या करता है?
+2

सुझाव:: नाम 'ListOfFnPointers' महत्वपूर्ण है

using FunctionPointer = std::string (SomeClassInterface::*)(); std::vector<FunctionPointer> 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)() इन कार्यों के लिए एक कॉल और परिणाम एसटीडी है :: स्ट्रिंग।

UPDATED:

  1. यह एसटीडी की :: संकेत दिए गए कार्य करने के लिए की वेक्टर घोषणा है। प्रत्येक फ़ंक्शन SomeClassInterface से संबंधित है, कोई पैरामीटर नहीं लेता है और std :: स्ट्रिंग लौटाता है।

  2. इस कोड के मामले में (pSomeClassObj -> * Fn)() ऑब्जेक्ट्स का कार्य psomeClassObj कहता है जहां एफएन इस फ़ंक्शन और pSomeClassObj के सदस्य के लिए एक सूचक है।

+0

आपको बहुत धन्यवाद। अब मैं स्पष्ट हूं –

संबंधित मुद्दे