How can I specify template parameter to be of a certain type i-e it must have implemented an interface (the template parameter must be a derived class of a specific base class)
Heres the interface (abstract base class)
class baseActionCounter{
public:
virtual int eat()=0;
virtual int drink()=0;
};
Now I want my template parameter to be of type baseActionCounter
Heres the templated class
//imaginary template syntax in the line below. Is there a way of achieving this behavior?
template <class counterType : baseActionCounter>
    class bigBoss{
    counterType counter;
    public:
    int consumerStats(){
    //I am able to call member function because I know that counter object has eat() and drink() 
    //because it implemented baseActionCounter abstract class
    return counter.eat() + counter.drink(); 
    }
    };
I can also just derive my bigBoss class from baseActionCounter but I want to know how to achieve this behavior with templates. Also, template specialization is not suitable as there is just one BigBoss class for any implementor of baseActionCounter class.
 
    