#include <iostream> #include <vector> #include "functors.h" #include "mean_template.h" int main(){ // Since C++11 using data_type=int; using result_type=double; using sum_type=sum<data_type>; using multiply_type=multiply<data_type>; using divide_type=divide<result_type>; using nroot_type=nroot<result_type>; using arithmetic_type=mean_impl<data_type,result_type,sum_type,divide_type>; using geometrical_type=mean_impl<data_type,result_type,multiply_type,nroot_type,1>; using mean_type=mean<data_type,result_type>; using mean_container_type=std::vector<mean_type *>; arithmetic_type a; geometrical_type b; mean_container_type c; // Add mean into the container c.push_back(new arithmetic_type{}); c.push_back(new geometrical_type{}); data_type indata{}; std::cout <<"Enter values [Ctrl-D to finish]: " <<std::endl; while(std::cin>>indata){ a.add_data(indata); b.add_data(indata); for(auto & i: c) i->add_data(indata); } std::cout << " Arithmetic mean: " << a.get_mean() << "\n Geometrical mean: " << b.get_mean() << std::endl; for(const auto & i: c) i->print(); return 0; }