#include <stdio.h>


class TraitsBase{
protected:
    
    TraitsBase() {}

    void func1(){
        printf("func1\n");
    }
    void func2(){
        printf("func2\n");
    }
public:
    virtual void call() = 0;
};
template<class T> class Traits;
template<> class Traits<int> : public TraitsBase{
public:
    virtual void call(){
        func1();
    }
    
};
template<> class Traits<float>: public TraitsBase{
public:
    virtual void call(){
        func2();
    }
};
int main(){
    Traits<int> i;
    i.call();
    Traits<float> f;
    f.call();
    
}