मैं एक चर तर्क तर्क सूची के साथ एक समारोह लिखना चाहता था। मैं अपने विकल्पों का पता लगाना चाहता हूं। मुझे पूरा यकीन है कि मैं इस उद्देश्य के लिए डिजाइन किए गए एक बूस्ट टेम्पलेट क्लास में आया हूं, लेकिन मैं इसका नाम नहीं सोच सकता? क्या कोई मुझे बता सकता है? या मैंने इसे सपना देखा! धन्यवादबूस्ट के साथ परिवर्तनीय तर्क सूचियां?
8
A
उत्तर
7
आप केवल एक ही प्रकार के तर्कों की एक चर गिनती स्वीकार करने के लिए एक कंटेनर ले जा रहा करने के लिए आम बात हो जाएगा की जरूरत है। कंटेनर तथापि ढील जा सकती है Boost.Assign का उपयोग करने का निर्माण:
void f(const std::vector<int>& vec) {}
f(boost::assign::list_of(1)(2)(3)(4));
वैकल्पिक रूप से आप (operator()
या operator<<
के जैसे) अधिक भार खुद के ऑपरेटर के लिए जा सकते हैं, दृष्टिकोण मानक पुस्तकालय धाराओं द्वारा उठाए के समान:
op() << arg1 << arg2 << arg3;
यदि आप वास्तव में एक प्रकार-सुरक्षित विविधता फ़ंक्शन प्रदान करना चाहते हैं (C++ 0x सुविधाओं का उपयोग किए बिना), Boost.Preprocessor सहायता कर सकता है। एक सामान्य उदाहरण:
#define OUT(z, n, name) << name ## n
#define MAKE_FUNC(z, n, unused) \
template<class T BOOST_PP_ENUM_TRAILING_PARAMS(n, class T)> \
void func(T t BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(n, T, t)) { \
std::cout << t BOOST_PP_REPEAT(n, OUT, t) << std::endl; \
}
BOOST_PP_REPEAT(9, MAKE_FUNC, ~) // generates func() versions taking 1-10 arguments
func(1, "ab", 'c'); // prints "1abc"
आप चर तर्क गणना लेकिन एक प्रकार, या भी मनमाना प्रकार मतलब है? –
मुझे यकीन नहीं है कि वास्तव में लाइब्रेरी क्या प्रदान की गई है, मैं इसे स्थानांतरित नहीं कर सकता, मुझे लगता है कि यह va_list पर कुछ प्रकार का सुधार था - संभवतः सुरक्षा – aukm
टाइप करें क्या आपके फ़ंक्शन को केवल एक प्रकार के तर्क लेने की आवश्यकता है या नहीं? –