template<class T,
template<class , class >
class CONT
>
struct Cont
{
typedef std::basic_string<T, std::char_traits<T>, std::allocator<T> > StringType;
typedef CONT<StringType, std::allocator<StringType > > Container;
Cont(Container& rhs):c(rhs)
{}
void operator() (std::basic_string<T> const& str)
{
c.push_back(str);
/*std::cout<<"push a element: "<<str<<endl;*/
}
private:
Container& c;
};
template<class T, class Handler>
struct Impl
{
Impl(Handler& f):h(f){}
void operator() (std::basic_string<T> const& str)
{
if(str.size())
h(str);
}
private:
Handler& h;
};
template<class T, class DO>
void _algorithms(std::basic_string<T> const& str, DO& what)
{
what(str);
}
template<class T>
void Function_Do1(std::basic_string<T> const& str, std::vector<std::basic_string<T> >& c)
{
/*typedef Cont<T, std::vector> vectorCont;
Impl<T, Cont<T, std::vector> > impl(Cont<T, std::vector>(c) );
_algorithms(str, impl);*/
/*
用上面的写法不能通过编译!
*/
_algorithms(str, Impl<T, Cont<T, std::vector> >(Cont<T, std::vector>(c)));
}
int main()
{
std::vector<string> test;
Function_Do1(std::string("is this ok now?"), test);
cin.get();
return 0;
}