विफल रहता है मैं एकाधिक पैरामीटर पैक को सीधे विस्तारित करने का एक तरीका बनाने की कोशिश कर रहा हूं। मैंने एक फ़ंक्शन template<size_t X,typename F> auto sequenceFunc(F&& f)
बनाया है, जो एक f
को विस्तारित integer_sequence
के साथ दिए गए फ़ंक्शन को कॉल करता है।सी ++: लैम्ब्डा के अंदर पैरामीटर पैक विस्तार
यह इस तरह छोटे कार्यों के लिए अच्छी तरह से काम करता है:
template<typename T,
size_t A,size_t B>
vec<B,T> col(const mat<A,B,T>& a,const size_t& i){
return sequenceFunc<A>([&](auto... J) -> vec<B,T>{
return { a[J][i]... }; //expands to a[0][i], a[1][i], ... a[A-1][i]
});
}
दुर्भाग्य से मैं कई पैरामीटर पैक विस्तार कर सकते हैं नहीं है, भले ही मैं नियम का पालन, कि केवल एक पैरामीटर पैक एक ...
-expression अंदर हो सकता है। ,
error: parameter packs not expanded with '...':
auto i = I;
^
मैं सच में समझ में नहीं आता क्यों एक विस्तार के लिए आवश्यक है क्योंकि वहाँ बाहर एक और ...
:
template<typename S,typename T,
size_t A,size_t B,size_t C>
mat<C,B,S> mul(const mat<A,B,S>& a,const mat<C,A,T>& b){
return sequenceFunc<B>([&](auto... I)->mat<C,B,S>{ //for all B rows in a...
return {
sequenceFunc<C>([&](auto... J)->vec<C,S>{ // ... look at all C columns in b and calculate dot product.
auto i = I; //putting "I" outside the expansion of "J"
return {
dot(row(a,i),col(b,J))... //expands J
};
})... //expands I
};
});
}
यह त्रुटि है: इस मैट्रिक्स गुणन के लिए इस समारोह का उपयोग करने में मेरी प्रयास है भाव। मैं जीसीसी 5.1.0 का उपयोग करता हूं।
सूचनाvec
और mat
std::array
के लिए केवल using
-declarations और एक नेस्टेड std::array<std::array<A,T>,B>
जीसीसी में लैम्बडास में पैक के साथ समस्याएं हैं। –
@ टी.सी. बगजिला लिंक? – Mgetz