std::vector<T> vector(ElementTypes... els) { std::vector<T> coll; size_t num_els = vararg_len<ElementTypes...>::len; coll.reserve(num_els); populate_vector(coll, els...); return coll; }
void driver() { meter_vector results; std::vector<double> inputs = {1.0, 10.0, 12.25}; std::vector<double> expected = {1.0, 1000.0, 1609.34, 10.0, 10000.0, 16093.4, 12.25, 12250.0, 19714.5}; for (double input : inputs) { populate_vector(fr::oonits::meters(input), &results); populate_vector(fr::oonits::kilometers(input), &results); populate_vector(fr::oonits::miles(input), &results); // Will result in a surprisingly informative error message // in gcc 4.9.0 // populate_vector(fr::oonits::celcius(input), &results); } for (int i = 0; i < expected.size(); ++i) { std::cout << "Expected: " << expected[i] << " result: " << results[i].units << std::endl; CPPUNIT_ASSERT(equalish(expected[i], results[i].units)); } }
inline void populate_vector(std::vector<T>& coll, Arg_T arg, RestTypes... rest_args) { coll.push_back(arg); populate_vector(coll, rest_args...); }