1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <tuple> // Generic pack array (metacontainer) template< typename T, T ... seq > struct value_sequence { // Append a value to the array (metafunction) template< T val > struct append { typedef value_sequence< T, seq..., val > type; }; }; // Generate a sequential array (metafunction) template< size_t N > struct index_sequence { typedef typename index_sequence< N - 1 >::type ::template append< N - 1 >::type type; }; template<> struct index_sequence< 0 > { typedef value_sequence< size_t > type; }; // Generate indexes up to size of given tuple (metafunction) template< typename T > struct index_tuple { typedef typename index_sequence< std::tuple_size< T >::value >::type type; }; // The magic function: passes indexes, makes all the function calls template< typename F, typename G, typename T, size_t ... N > void compose_with_indexes_helper( F f, G g, T args, value_sequence< size_t, N ... > ) { f( g( std::get< N >( args ), N ) ... ); } template< typename F, typename G, typename ... T > void compose_with_indexes( F f, G g, T && ... args ) { typedef std::tuple< T && ... > tuple_t; compose_with_indexes_helper // forwarding seems broken on ideone.com/GCC 4.5.1, work around. // ( f, g, std::forward_as_tuple( std::forward( args ) ... ) ); ( f, g, tuple_t( args ... ), typename index_tuple< tuple_t >::type() ); } #include <iostream> #include <sstream> struct prepend_index { template< typename T > std::string operator()( T const &value, size_t n ) { std::ostringstream oss; oss << n << ": " << value << '\n'; return oss.str(); } }; struct print { template< typename T, typename ... TN > std::ostream &operator()( T const &head, TN const & ... tail ) { std::cout << head; return print()( tail ... ); } std::ostream &operator()() { return std::cout; } }; template< typename ... T > void print_menu( T const & ... items ) { compose_with_indexes( print(), prepend_index(), items... ); } int main() { print_menu( "Yes", 'n', 42 ); } |
I2luY2x1ZGUgPHR1cGxlPgoKLy8gR2VuZXJpYyBwYWNrIGFycmF5IChtZXRhY29udGFpbmVyKQp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgVCAuLi4gc2VxID4gc3RydWN0IHZhbHVlX3NlcXVlbmNlIHsKICAgIC8vIEFwcGVuZCBhIHZhbHVlIHRvIHRoZSBhcnJheSAobWV0YWZ1bmN0aW9uKQogICAgdGVtcGxhdGU8IFQgdmFsID4gc3RydWN0IGFwcGVuZAogICAgICAgIHsgdHlwZWRlZiB2YWx1ZV9zZXF1ZW5jZTwgVCwgc2VxLi4uLCB2YWwgPiB0eXBlOyB9Owp9OwoKLy8gR2VuZXJhdGUgYSBzZXF1ZW50aWFsIGFycmF5IChtZXRhZnVuY3Rpb24pCnRlbXBsYXRlPCBzaXplX3QgTiA+CnN0cnVjdCBpbmRleF9zZXF1ZW5jZSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGluZGV4X3NlcXVlbmNlPCBOIC0gMSA+Ojp0eXBlCiAgICAgICAgICAgICAgICAgICAgICA6OnRlbXBsYXRlIGFwcGVuZDwgTiAtIDEgPjo6dHlwZSB0eXBlOwp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgaW5kZXhfc2VxdWVuY2U8IDAgPgogICAgeyB0eXBlZGVmIHZhbHVlX3NlcXVlbmNlPCBzaXplX3QgPiB0eXBlOyB9OwoKLy8gR2VuZXJhdGUgaW5kZXhlcyB1cCB0byBzaXplIG9mIGdpdmVuIHR1cGxlIChtZXRhZnVuY3Rpb24pCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0IGluZGV4X3R1cGxlIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaW5kZXhfc2VxdWVuY2U8IHN0ZDo6dHVwbGVfc2l6ZTwgVCA+Ojp2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUgdHlwZTsKfTsKCi8vIFRoZSBtYWdpYyBmdW5jdGlvbjogcGFzc2VzIGluZGV4ZXMsIG1ha2VzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbHMKdGVtcGxhdGU8IHR5cGVuYW1lIEYsIHR5cGVuYW1lIEcsCiAgICAgICAgICB0eXBlbmFtZSBULCBzaXplX3QgLi4uIE4gPgp2b2lkIGNvbXBvc2Vfd2l0aF9pbmRleGVzX2hlbHBlciggRiBmLCBHIGcsIFQgYXJncywKICAgICAgICB2YWx1ZV9zZXF1ZW5jZTwgc2l6ZV90LCBOIC4uLiA+ICkgewogICAgZiggZyggc3RkOjpnZXQ8IE4gPiggYXJncyApLCBOICkgLi4uICk7Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBGLCB0eXBlbmFtZSBHLCB0eXBlbmFtZSAuLi4gVCA+CnZvaWQgY29tcG9zZV93aXRoX2luZGV4ZXMoIEYgZiwgRyBnLCBUICYmIC4uLiBhcmdzICkgewogICAgdHlwZWRlZiBzdGQ6OnR1cGxlPCBUICYmIC4uLiA+IHR1cGxlX3Q7CiAgICBjb21wb3NlX3dpdGhfaW5kZXhlc19oZWxwZXIKLy8gICAgICAgIGZvcndhcmRpbmcgc2VlbXMgYnJva2VuIG9uIGlkZW9uZS5jb20vR0NDIDQuNS4xLCB3b3JrIGFyb3VuZC4KLy8gICAgICAgICggZiwgZywgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKCBzdGQ6OmZvcndhcmQoIGFyZ3MgKSAuLi4gKSApOwogICAgICAgICggZiwgZywgdHVwbGVfdCggYXJncyAuLi4gKSwgdHlwZW5hbWUgaW5kZXhfdHVwbGU8IHR1cGxlX3QgPjo6dHlwZSgpICk7Cn0KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CgpzdHJ1Y3QgcHJlcGVuZF9pbmRleCB7CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RkOjpzdHJpbmcgb3BlcmF0b3IoKSggVCBjb25zdCAmdmFsdWUsIHNpemVfdCBuICkgewogICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKICAgIG9zcyA8PCBuIDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKICAgIHJldHVybiBvc3Muc3RyKCk7Cn0KfTsKCnN0cnVjdCBwcmludCB7CnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSAuLi4gVE4gPgpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yKCkoIFQgY29uc3QgJmhlYWQsIFROIGNvbnN0ICYgLi4uIHRhaWwgKSB7CiAgICBzdGQ6OmNvdXQgPDwgaGVhZDsKICAgIHJldHVybiBwcmludCgpKCB0YWlsIC4uLiApOwp9CgpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yKCkoKSB7IHJldHVybiBzdGQ6OmNvdXQ7IH0KfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSAuLi4gVCA+CnZvaWQgcHJpbnRfbWVudSggVCBjb25zdCAmIC4uLiBpdGVtcyApIHsKICAgIGNvbXBvc2Vfd2l0aF9pbmRleGVzKCBwcmludCgpLCBwcmVwZW5kX2luZGV4KCksIGl0ZW1zLi4uICk7Cn0KCmludCBtYWluKCkgewogICAgcHJpbnRfbWVudSggIlllcyIsICduJywgNDIgKTsKfQ==
-
upload with new input
-
result: Success time: 0s memory: 2968 kB returned value: 0
0: Yes 1: n 2: 42


