
er wrote:
Now if you want to repeat the operation of inserting the element f( x ), I'm not sure how you do that with Range, but with V2, after learning the syntax, it's relatively straightforward:
( put_front<1>( cont ) % ( _data = f ) % ( _repeat = n ) )( 1, 10, 100, 1000 );
This was suggested, which is probably the best:
push_front<1>( cont , _data = f, _repeat = n )( 1, 10, 100, 1000 );
More generally,
// Fixed arity: push_front<I>( cont , options... )( a1,...,aI,...,z1,...,zI );
// Variadic push_front( cont , options... )( args1 )...( argsn );
where in each case (fixed and variadic), options... modify the semantics of the subsequent calls to operator().
Can we change the name of _data to something like _filter? Also, I don't like the pre and post _ names in the interface. If you want to use a convention related to pre and post _ in the implementation details that's fine, but I don't think it is appropriate in the interface. If you use boost.parameter I think you would get a post _ charater, I believe, so having both pre and post _ for different reasons seems confusing. Also, it would be nice to have iterator pair and range be acceptable alternatives to the fixed arity and variadic options shown above. I realize that would require some SFINAE, but I think being able to consistently initialize containers and then mix the forms would be a big plus. char* cstr[] = "Hello world!"; std::vector<char> chrs; push_back( chrs , filter = to_upper )( cstr, cstr+5 )( '\0' ); chrs contains a null terminated string "HELLO". There is then a whole area of treating std::string like a container by specializing some of your library interfaces that would really be handy. Regards, Luke