मुझे लगता है कि कारणों में से एक कारण है क्योंकि boost :: hold_any एक टेम्पलेट मेटाप्रोग्रामिंग दृष्टिकोण का उपयोग करता है जबकि बढ़ावा देता है :: कोई विरासत दृष्टिकोण का उपयोग करता है।
आंतरिक रूप से, को बढ़ावा देने :: भावना :: hold_any भंडार "मूल्य" एक शून्य * का उपयोग करने और किसी अन्य वस्तु का उपयोग करता है डेटा प्रकार की जानकारी का ट्रैक रखने के:
>> boost/spirit/home/support/detail/hold_any.hpp
template <typename Char>
class basic_hold_any
{
....
spirit::detail::fxn_ptr_table<Char>* table;
void* object;
...
}
बढ़ावा :: किसी भी स्टोर "मूल्य "धारक का उपयोग करके, और डेटा प्रकार की जानकारी का ट्रैक रखने के लिए इसे किसी अन्य ऑब्जेक्ट की आवश्यकता नहीं है। धारक को प्लेसहोल्डर से विरासत में मिला है और इसके परिणामस्वरूप विरासत में कमी आती है।
>> boost/any.hpp
class any
{
...
placeholder * content;
...
}
class placeholder
template<typename ValueType>
class holder : public placeholder
{
...
ValueType held;
...
}
... कार्यक्षमता अंतर निर्माणकर्ता और विनाशकर्ता बुला के बारे में भी बहुत कुछ है, लेकिन फिर भी कास्टिंग के लिए, को बढ़ावा देने :: भावना :: hold_any तेजी से होना चाहिए।
स्रोत
2012-11-10 12:20:44
क्या आपने उस आलेख से जुड़े स्टैक ओवरफ़्लो पोस्ट को पढ़ा था? – Mat
क्या आपने मूल्य वर्टेंटिक छद्म पॉइंटर वर्गों के संदर्भ में "छोटे ऑब्जेक्ट ऑप्टिमाइज़ेशन मुहावरे" के बारे में सुना है, जैसे कि स्टडी स्ट्रिंग? – Yakk