Wrestling templates for this one function is proving to be beyond me.
What I want:
A function that produces the same float type as the one given to it inside any of the following containers:
vector<ANY_FLOAT_TYPE>
array<ANY_FLOAT_TYPE, N>
(I'm open to having it accept even more containers, of course!)
The Problem:
The problem lies with array<> accepting an integer as its second template argument while vector<> accepts an allocator in that position. How do I write a templated function that can accept both typenames and ints for a single argument? Or is this the wrong way to proceed and write this function?
I could just copypaste and write the function twice, both for vector<> s and array<> s, but that's no solution...
template <typename FT, typename CONT_T, typename... Ts>
FT float_sum( CONT_T<FT, Ts...> xs ) {
// WARNING: not an accurate summation algorithm!
return accumulate( xs.begin(), xs.end(), 0 );
//////////////
static_assert( is_floating_point<FT>::value, "sum() only accepts floating point types." );
}
