2010-08-05 18 views
10

मैं कुछ समय बिताने की जांच boost:: पुस्तकालयों वास्तुकला और निम्नलिखित तथ्य के साथ रुचि थी:सी ++ बढ़ावा आगे घोषणा प्रश्न

पुस्तकालयों एक yyy_fwd.hpp विचार बहुत आम प्रयोग किया जाता है के कुछ भागों में (boost/detail या boost/flyweight उदाहरण के लिए देखें)।

इन फ़ाइलों में स्पष्ट रूप से कुछ टेम्पलेट-आधारित वर्गों की केवल आगे की घोषणाएं शामिल हैं और जहां तक ​​मैं समझता हूं, संकलन समय के संदर्भ में लाभ हो सकता है।

क्या कोई बता सकता है कि वे किस मामले में सहायता करते हैं और क्या मुझे अपने स्वयं के टेम्पलेट्स डिजाइन करते समय एक ही विचार का उपयोग करना चाहिए?

धन्यवाद।

उत्तर

3

संकलन-समय निर्भरताओं को कम करने के लिए आगे की घोषणाओं की आवश्यकता है। उदाहरण के लिए, पिंपल मुहावरे को लागू करते समय।

एक और मामला यह है कि, उदाहरण के लिए, boost::pool* विंडोज प्लेटफ़ॉर्म पर windows.h पर निर्भर करता है। मेरा इंटरफ़ेस बनाते समय मैं अपने इंटरफ़ेस का उपयोग करके सिस्टम हेडर को शामिल करने के लिए अपनी कक्षा के उपयोगकर्ताओं को मजबूर नहीं करना चाहता हूं। क्योंकि boost/poolfwd.hpp अभी भी windows.h शामिल


* ठीक है, कि एक बुरा उदाहरण है, है, लेकिन मुझे उम्मीद है कि वे इस मुद्दे को ठीक कर देंगे। और मुझे उम्मीद है कि आपको विचार मिल जाएगा।

+0

+1 अच्छे बुरे उदाहरण के लिए :-) –

2

मुझे बढ़ावा देने के बारे में पता नहीं है, लेकिन ये आगे की घोषणा मानक पुस्तकालय में भी मौजूद है। उदाहरण के लिए, <iosfwd> में धाराओं के लिए आगे की घोषणाएं शामिल हैं (जो टेम्पलेट्स हैं, आमतौर पर टाइपिफ के पीछे छिपी हुई हैं)।

ओवरलोडेड ऑपरेटर < < घोषित करते समय आपको इस शीर्षलेख से लाभ होगा।

अपने हेडर में:

#include <iosfwd> 

class X { ... }; 

std::ostream& operator<< (std::ostream& os, const X& x); 

ध्यान दें कि हैडर ostream से भरा परिभाषा की आवश्यकता नहीं है (= basic_ostream<char, char_traits<char> >)।

हेडर के लिए तर्क यह है कि वे टेम्पलेट स्वयं को घोषित करने के लिए बोझिल हैं। उपर्युक्त उदाहरण के लिए, यह कुछ ऐसा दिखाई देगा:

namespace std { 
    template <class CharT> 
    class char_traits; 

    template <class CharT, class CharTraits> 
    class basic_ostream; 

    typedef basic_ostream<char, char_traits<char> > ostream; 
} 
संबंधित मुद्दे