Lets say, I have 3 classes, that provides same functions. They are unrelated in class hierarchy but they are implemented in such way to be similar to eachother.
- class A
- class B
- class C
For example purposes lets assume that A, B and C are arrays that hold some integers, but every class holds it in different way. Every class provides its iterator class and class_name::begin() and class_name::end(). Now I have some function template foo that increments every element of the array. 
template <typename T>
void foo(T & a)
{
    for(auto & element : a)
        element++;
}
But lets say that foo has enormously big body, that works for every type T as A, B, or C. How can I tell compiler:
I will use only
foo<A>,foo<B>andfoo<C>. Let me move my function to .cpp file and link it.
The reason I am asking this is because templates are used to shorten code, that works for more than one compile-time-resolvable context. I don't want to write the same function inside .cpp file 3 times.
