मैंने एक फैक्टरियल फ़ंक्शन के लिए लुकअप टेबल के रूप में उपयोग करने के लिए boost::mpl::vector
उत्पन्न करने के लिए कुछ कोड लिखा, एक सामान्य लाइब्रेरी फ़ंक्शन के लिए एक परीक्षण के रूप में, जिसके साथ कोई डेवलपर लुकअप उत्पन्न कर सकता है primitives की एक स्थिर सरणी के रूप में तालिका। समारोह (जो संभवत: एक पूर्वप्रक्रमक मैक्रो परिभाषा के रूप में लागू किया जाएगा) नाम और सरणी के आकार को स्वीकार करेंगे प्रारंभ करने के लिए, साथ ही एक वर्ग टेम्पलेट के नाम प्रत्येक तत्व मैं की प्रारंभ करने में metafunction के रूप में प्रयोग की जाने वाली सरणीएक एमपीएल वेक्टर को एक स्टेटिक ऐरे में परिवर्तित करना
मैंने सोचा था कि सबसे अच्छा तरीका है बाहरी स्क्रिप्ट के उपयोग के बिना यह कर
- होगा एक
boost::mpl::vector
बनाएं के बारे में जाना है कि करने के लिए, के रूप में कोड में नीचे सूचीबद्ध किया जाता है, और के रिटर्न मान धक्का वेक्टर के पीछे सरणी के प्रत्येक तत्व के लिए उपयोगकर्ता द्वारा आपूर्ति मेटाफंक्शन; - वेक्टर के तत्वों का प्रयोग करें स्थिर सरणी प्रारंभ (शायद मैक्रो, जिनमें से आखिरी यह पूरा करने का प्रयोग करेंगे
__VARARGS__
मैक्रो की एक श्रृंखला का उपयोग करके)।
मुझे नहीं पता कि मैं कैसे पूरा करूंगा (2) और न ही मैं जो प्रक्रिया का वर्णन करता हूं वह है जो मैं चाहता हूं वह करने का एक अच्छा तरीका है। यहां निम्न प्रश्न दिए गए हैं जिनके लिए मुझे उत्तर चाहिए:
- क्या मेरी प्रक्रिया मेरी इच्छाओं को पूरा करने का एक अच्छा तरीका है? यदि नहीं, तो कृपया एक बेहतर प्रक्रिया का वर्णन करें जो बाहरी स्क्रिप्ट के उपयोग के बिना एक ही चीज़ को पूरा करेगा।
यदि मेरे प्रक्रिया वास्तव में मैं क्या तलाश को पूरा करने का एक अच्छा तरीका है, मैं कैसे लागू होगा (2)?
मैं स्रोत पुस्तकालय समारोह जो मैं एक बार का वर्णन मैं इसे लागू युक्त फ़ाइल के लिए लिंक पोस्ट करने के लिए सुनिश्चित हो जाएगा। कोड लिस्टिंग नीचे दी गई है।
नाम स्थान एमपीएल = बढ़ावा देने :: एमपीएल;
template <typename x> struct factorial: mpl::if_<mpl::greater<x, mpl::int_<1>>, mpl::multiplies<x, factorial<x::prior>>, mpl::int_<1> >::type {}; template <typename sequence, typename size> struct compileTable: mpl::if_<mpl::greater<size, mpl::int_<0>>, compileTable< mpl::push_front<sequence, factorial<size>>::type, size::prior >, sequence >::type {}; static const int TABLE_SIZE = 13; typedef compileTable< mpl::vector<>, mpl::int_<TABLE_SIZE> >::type factorialTable; /* ** This is where I am stuck; how would I use the elements ** of factorialTable to initialize a static array? */
http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/for-each.html – Anycorn
का उपयोग करें, मैं यहां थोड़ा उलझन में हूं - क्योंकि प्रत्येक के लिए रनटाइम एल्गोरिदम है, एक स्थिर सरणी शुरू करने के लिए मैं इसका उपयोग कैसे करूं? –
स्थिर सरणी से आपका क्या मतलब है? 'स्थिर int foo []'? – Anycorn