का उपयोग _1, _2, ... सीधे variadic टेम्पलेट के साथ संभव नहीं है। आपको इसके बजाय विशाल मैक्रोज़ का उपयोग करने की आवश्यकता है।
हालांकि, आप टेम्पलेट तर्क 1, _2 के लिए 2, आदि के साथ _1 प्राप्त करने के लिए एक टेम्पलेट कारखाने में प्लेसधारकों को लपेट सकते हैं ...इस तरह के जीसीसी/MSVC के रूप में
कार्यान्वयन पहले से ही प्लेसहोल्डर परिभाषित के रूप में टेम्प्लेटेड struct (क्रमशः std :: _ प्लेसहोल्डर और std :: _ पीएचडी) ताकि आप आप कारखाना इस तरह से परिभाषित कर सकते हैं:
struct ph_factory {
template<size_t holder>
static std::_Placeholder<holder> make_ph() {
return std::_Placeholder<holder>();
}
};
यह परिभाषित, आप विस्तार कर सकते हैं सभी प्लेसहोल्डर के साथ एक पैरामीटर पैक आप चाहते हैं:
struct tester {
template<size_t ... holders>
void test(int val) {
auto callable = std::bind(&tester::call, this, val, ph_factory::make_ph<holders>()...);
callable('a', 42, 'c');
}
void call(int v1, char c1, int v2, char c2) {
cout << "calling :" << v1 << " " << c1 << " " << v2 << " " << c2 << endl;
}
};
तो निम्न कोड होगा उत्पादन "बुला: 10 सी 42 एक"
int main() {
tester t;
t.test<3,2,1>(10);
}
make_indice जैसे चालों का उपयोग करके आपको मूल लक्ष्य प्राप्त करने की संभावना मिल जाएगी।
यहां मेक_इंडिस उपयोगिता का एक अच्छा कार्यान्वयन है: [http://preney.ca] (http://preney.ca/paul/2011/10/16/applying-stdtuple-to-functors- कुशलतापूर्वक /) लेकिन मुझे यह समझने में कठिनाई हो रही है कि मैं इसे बढ़ावा देने के साथ कैसे उपयोग कर सकता हूं :: arg
Blizter
वह लिंक एक महान पढ़ा गया था, और 'लागू (Func, std :: tuple)' फ़ंक्शन किसी दिन काम में आ सकता है । –
मैं 'टाइपनाम ... Args' देखता हूं। क्या आप सी ++ 11 का उपयोग कर रहे हैं? – kennytm