मेरे पास कई कार्यों है कि बहुत समान हैं, लेकिन अलग संख्या और स्थानीय वस्तुओं के प्रकार के साथ चलाएँ:स्थानीय चर के परिवर्तनीय संख्या बनाने के लिए विविधता टेम्पलेट पैरामीटर के माध्यम से पुनरावृत्ति कैसे करें?
template <class T> T* create1(const std::vector<std::string>& names)
{
A a(names[0]);
B b(names[1]);
C c(names[2]);
if (a.valid() && b.valid() && c.valid())
return new T(a, b, c);
else
return NULL;
}
template <class T> T* create2(const std::vector<std::string>& names)
{
D d(names[0]);
E e(names[1]);
if (d.valid() && e.valid())
return new T(d, e);
else
return NULL;
}
create1<ABC>({ "nameA", "nameB", "nameC" });
create2<DE>({ "nameD", "nameE" });
variadic टेम्पलेट मुझे इस रूप में उन कार्यों का एक रिफैक्टरिंग प्राप्त करने में मदद करेंगे?
template <class T, typename Args...> T* create()
{
// loop over Args and create 2 or 3 objects
// if (....valid())
// return T(...);
// else
// return NULL;
}
create<ABC,A,B,C>({ "nameA", "nameB", "nameC" });
create<DE,D,E>({ "nameD", "nameE" });
कोई सफलता के साथ How can I iterate over a packed variadic template argument list? और iterating over variadic template's type parameters जांच की गई। यह नहीं देख सकता कि मैं विभिन्न प्रकार की स्थानीय वस्तुओं की एक चर संख्या कैसे बना सकता हूं ...
क्या उन्हें * स्थानीय वस्तुओं के लिए * की आवश्यकता है? या अस्थायी हैं ठीक है? – Rakete1111
यदि संभव हो तो मैं स्थानीय पसंद करूंगा, क्योंकि वास्तव में उनकी रचना विफल हो सकती है और फिर कार्य की प्रारंभिक वापसी की ओर ले जाती है। पोस्ट अपडेट किया गया। – jpo38
आप वेक्टर नामों का आकार क्यों नहीं देखते हैं और यदि कोई कथन करते हैं? आप यह सब केवल एक समारोह में कर सकते हैं। यह विविध टेम्पलेट का उद्देश्य नहीं है। शायद आप [cstdarg] (http://www.cplusplus.com/reference/cstdarg/) का उपयोग करना चाहते हैं? – Stargateur