2011-12-13 19 views
5

का उपयोग कैसे करें the wikipedia article में, यह कुछ टेम्पलेट वर्ग प्रदान करता है। मैं इसे वास्तविक कोड में उपयोग करना चाहता हूं। मैं उसे कैसे कर सकता हूँ? मैंने पाया कि Vec ऑब्जेक्ट को तुरंत चालू करने के लिए मेरे पास लगभग कोई रास्ता नहीं है।वास्तव में अभिव्यक्ति टेम्पलेट

उत्तर

2

Wikibooks article on Expression Templates और अधिक जानकारी, विशेष रूप से अंतिम भाग प्रदान करता है:

ऊपर के उदाहरण प्रदर्शित नहीं करता है कैसे पुनरावर्ती प्रकार संकलन समय पर उत्पन्न कर रहे हैं। इसके अलावा, expr बिल्कुल गणितीय अभिव्यक्ति की तरह नहीं दिखता है, लेकिन यह वास्तव में एक है। निम्नलिखित कोड लोड किए गए + ऑपरेटर के दोहराए गए तत्कालता का उपयोग करके दिखाए गए कोड को कैसे क्रमबद्ध रूप से बनाया गया है।

template< class A, class B > 
DExpression<DBinaryExpression<DExpression<A>, DExpression<B>, Add> > 
operator + (DExpression<A> a, DExpression<B> b) 
{ 
    typedef DBinaryExpression <DExpression<A>, DExpression<B>, Add> ExprT; 
    return DExpression<ExprT>(ExprT(a,b)); 
} 

ऊपर अतिभारित ऑपरेटर + दो काम करता है - यह वाक्यात्मक चीनी कहते हैं और पुनरावर्ती प्रकार संरचना, संकलक की सीमा से घिरा सक्षम बनाता है।

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression. 
+0

यह संभव है आप http://en.wikipedia.org/wiki/Expression_templates में कोड के लिए एक चल उदाहरण प्रदान के लिए: यह इसलिए इस प्रकार का मूल्यांकन करने के लिए कॉल को बदलने के लिए इस्तेमाल किया जा सकता? इस मामले में इसे कैसे काम करें? धन्यवाद। –

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