Re: STL algorithms and output iterators
Generic Usenet Account wrote:
I am trying to play with STL algorithms that have an output iterator
type as one of their arguments (copy, transform, replace_copy,
replace_copy_if. fill_n, generate_n, remove, recome_copy,
remove_copy_if, unique_copy, reverse_copy, rotate_copy, merge,
set_union, set_intersection, set_difference, set_symmetric_difference,
partial_sum, adjacent_difference).
All these algorithms operate on a "container" entity (e.g. list<int>
or set<string>). I am having a tough time getting a "wrapper"
function to compile if I pass both the container type and the
contained datatype as template arguments. For example, the compiler
likes <list<int> > but not <list, int>.
I am attaching some sample code to get my point across. Is there a
way to avoid the compilation error if I uncomment the line
#define BREAK_COMPILATION
Thanks,
Ramesh
///////////////////////////////////
//
// Sample program to test usage of STL algorithms
//
///////////////////////////////////
#include <iostream>
#include <iterator>
#include <string>
#include <list>
#include <set>
#include <algorithm>
using namespace std;
//#define BREAK_COMPILATION
The rest of the code presumes we uncommented this. I redacted
unnecessary code
template<typename T1, typename T2>
void
executeSTLAlgo(const string& label)
{
[..]
}
main()
int main()
{
executeSTLAlgo<list,int>("List");
executeSTLAlgo<set, int>("Set");
}
That's not going to work because 'list' is NOT a typename. It's
a template. In order to use 'list' as is (or 'std::list') you need
to declared your 'executeSTLAlgo' to have a _template_ template
argument (no, I didn't make a mistake, two "templates"). Find
a good book ("C++ Templates" by Vandevoorde and Josuttis is good)
and read about template template arguments.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask