2012-04-10 14 views
6

क्या डॉक्सिजन में सी ++ अवधारणा को दस्तावेज करने का कोई सुविधाजनक तरीका है? मैं this in the boost documentation जैसे किसी प्रकार का दस्तावेज लेना चाहता हूं।डॉक्सिजन का उपयोग कर एक सी ++ अवधारणा को दस्तावेज करना?

उत्तर

3

आप क्या कर सकते हैं कॉन्सेप्ट नामक एक कस्टम टैग को परिभाषित किया गया है, जिसका उपयोग आप वर्णन करते समय कर सकते हैं। इस का एक example Doxygen में उर्फ ​​तंत्र, की तरह कुछ का उपयोग करने के लिए है:

उपनाम + = "चोर = \ xrefitem चोर \" संकल्पना \ "\" अवधारणाओं \ ""

+3

मुझे खेद है, लेकिन यह स्पष्ट नहीं है कि उपनाम को कैसे परिभाषित किया जाता है अवधारणाओं को दस्तावेज में। क्या आप इस उत्तर पर विस्तार कर सकते हैं, शायद एक उदाहरण के साथ? –

2

आप पर टिप्पणी/दस्तावेज़ के लिए \tparam का उपयोग कर सकते हैं।

+1

मैं यह कहने के लिए '\ tparam' का उपयोग कर सकता हूं कि इस टेम्पलेट पैरामीटर को तुरंत चालू करने वाला वर्ग अवधारणा xyz के संदर्भ में लागू किया जाना चाहिए। लेकिन अवधारणा को कैसे दस्तावेज करते हैं? – proto

+0

यकीन नहीं है कि मैं समझता हूं कि आप क्या खोज रहे हैं। आप एक '\ note' कह सकते हैं कि xyz अवधारणा इतनी-बहुत है, लेकिन शायद यह अवधारणा के लिए दस्तावेज़ लिखने का सबसे अच्छा स्थान नहीं है। यदि आपके पास अवधारणा के लिए वास्तविक कक्षा/संरचना है, तो आप इसके लिए प्रलेखन लिख सकते हैं जैसे कि आप किसी अन्य वर्ग – Attila

+1

के लिए करेंगे क्योंकि सी ++ (अभी तक) का उपयोग करके अवधारणा निर्दिष्ट करने का कोई तरीका नहीं है, वहां कोई कक्षा नहीं है (या फ़ाइल) अवधारणा का वर्णन। केवल इसे लागू करने वाले वर्ग हैं। मुझे आश्चर्य हुआ कि क्या इसे रोकने के लिए एक स्थापित तरीका है और मेरे डॉक्सिजन आउटपुट में अवधारणाओं के लिए दस्तावेज़ीकरण शामिल है। – proto

1

मैं वर्तमान में अलग मैनुअल पृष्ठों का उपयोग अवधारणाओं को दस्तावेज करने और \section और \subsection के साथ समूहबद्ध करने के लिए। मैं उन्हें \ref के साथ लिंक कर सकता हूं। यह तब तक काम करता है जब तक आप दिए गए लिंक के रूप में टेबल के साथ अवधारणाओं का वर्णन करते हैं, लेकिन दुर्भाग्य से एकल वर्गों के लिंक सक्षम नहीं होंगे।

मेरे पास एक प्रकार के मॉडल की अवधारणाओं की एक सूची बनाने के लिए उपनाम भी है।

+0

+1 क्योंकि आपके उत्तर ने मुझे मेरे अनुभागों का संदर्भ देने में मदद की। –

6

कुछ लोगों के साथ डॉक्सिजन के साथ संघर्ष करने के बाद, मैं अंततः निम्नलिखित समाधान में आया।

  1. अपने अवधारणा के लिए एक समूह को परिभाषित करें: पृष्ठों का उपयोग कि उचित नहीं है के बाद से एक पेज, (ऊपर से पेड़ के नीचे करने के) अपने उपपृष्ठ का संकेत देना चाहिए, जबकि समूहों से संकेत मिलता है संभवतः कई माता पिता समूहों। यह अनुमति देता है:

    • , एक (या अधिक) माता-पिता अवधारणा (ओं) को एक अवधारणा को जोड़ने से माता-पिता की अवधारणा ही (शोधन/अवधारणाओं के सामान्यीकरण)
    • बदलते कई अवधारणाओं के लिए एक इकाई को लिंक करने के बिना, बदले बिना अवधारणा ही (जैसे। जब पुस्तकालय के लिए एक विशिष्ट अवधारणा एक वर्ग को जोड़ने को लागू करने)

    उदाहरण

    /*[email protected] measurement_functor_concepts Measurement function objects 
    * @ingroup generalconcepts 
    * @{ 
    * @par Description 
    * blablabla 
    * 
    * @par Notations 
    * Let @c F be the type of the function object, @c f an instance. 
    * 
    * @par Valid Expressions 
    * - @c f function object is ... 
    * - <b>f.result()</b> returns ... 
    * @} 
    */ 
    
  2. एक को परिभाषित करें एक तर्क के साथ कस्टम आदेश concept:

    ALIASES += concept{1}="@ingroup \1\[email protected] Implemented concepts:\[email protected] \1" 
    

    आदेश:

    • समूह की अवधारणा को परिभाषित करने में इकाई में शामिल हैं: इकाई अवधारणा के प्रलेखन में दिखाई देगा (इकाई कई में दिखाई दे सकते हैं समूह)
    • लागू पैरामीटर के लिए एक लिंक प्रदान करते हुए Implemented concepts के साथ एक अनुच्छेद जोड़ता है।
  3. इंगित करें कि एक विशेष वर्ग/struct अवधारणा लागू करता है:

    //[email protected] Does things... 
    //[email protected]{measurement_functor_concepts} 
    template <class T> 
    struct my_struct: public std::unary_function<T, void> {}; 
    

मैं एक तरह से (मान्य अभिव्यक्ति के लिए अच्छा टेबल बूस्ट में की तरह एक अच्छा प्रलेखन उत्पन्न करने के लिए नहीं मिला, आदि), लेकिन कम से कम दस्तावेज के इस संगठन चीजों को ठीक से अलग करता है।

1

मैं सुझाव है कि आप निम्नलिखित पर विचार:

क) बूस्ट संकल्पना पुस्तकालय जाँच हो रही है के लिए दस्तावेज़ को देखो। यह दस्तावेज आपको दिखाता है कि कक्षा बनाने के लिए आपके कोड में इसका उपयोग कैसे किया जा सकता है ताकि वास्तव में उस अवधारणा की आवश्यकताओं को पूरा किया जा सके जिसे आप परिभाषित करना चाहते हैं। आप इसे इस तरह का उपयोग करें:

template<typename T> 
my_class{ 
    MyConcept(T); // provokes compile error if T does not match concept 
    T m_t; 
}; 

FYI करें वहाँ अवधारणा जाँच वर्ग बनाने में इस्तेमाल किया तत्वों और और अवधारणाओं लाइट प्रस्ताव के बीच एक पत्राचार करने के लिए एक से एक है। तो जब अवधारणाओं का प्रकाश वास्तव में काम कर रहा है, तो संक्रमण आसान होना चाहिए।

बी) अब MyConcept जांच वर्ग को दस्तावेज़ करने के लिए DOxygen का उपयोग करें !!!

ग) का प्रयोग करें Doxygen/my_class प्रलेखन पर tparam MyConcept

ग) तो अब आप वास्तव में क्या आप के लिए पूछ रहे हैं है का उल्लेख करने के !!! - आपकी अवधारणा के लिए एक अलग पृष्ठ, और उस अवधारणा की आवश्यकता वाले सभी वर्गों से संदर्भित करने की क्षमता।

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