6
मैं this SO question पर देख रहा था और मुझे समझ में नहीं आया कि उत्तर कैसे काम करता है। return callFunc(typename gens<sizeof...(Args)>::type());
परयह विविध टेम्पलेट कैसे काम करता है?
template<int N, int ...S> struct gens : gens<N-1, N-1, S...> {};
उदाहरण में मुझे लगता है कि sizeof..(Args)
संभालने हूँ:
template<int ...> struct seq {};
// How does this line work?
template<int N, int ...S> struct gens : gens<N-1, N-1, S...> {};
template<int ...S> struct gens<0, S...>{ typedef seq<S...> type; };
double foo(int x, float y, double z)
{
return x + y + z;
}
template <typename ...Args>
struct save_it_for_later
{
std::tuple<Args...> params;
double (*func)(Args...);
double delayed_dispatch()
{
return callFunc(typename gens<sizeof...(Args)>::type());
}
template<int ...S>
double callFunc(seq<S...>)
{
return func(std::get<S>(params) ...);
}
};
int main(void)
{
std::tuple<int, float, double> t = std::make_tuple(1, 1.2, 5);
save_it_for_later<int,float, double> saved = {t, foo};
cout << saved.delayed_dispatch() << endl;
}
हिस्सा मुझे समझ नहीं आता यह है: मैं संदर्भ के लिए जवाब में से एक में कोड की एक प्रति पोस्ट करेंगे होगा। तो,
template<int N, int ...S> struct gens : gens<N-1, N-1, S...> {};
हो जाता है
template<3, {}> struct gens : gens<3-1, 3-1, {}> {};
यह सही है, और यदि हां, क्या वहाँ से क्या होता है?
धन्यवाद। इस तरह से रिकर्सन का उपयोग वास्तव में मुझे फेंक दिया। –
धन्यवाद, मैं भी इस भाग से पूरी तरह उलझन में था। – Zeks