Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a method to templated class for specific type

Tags:

c++

templates

For example, I have a class template:

template <typename T>
class base {
public:
   void set(T data) { data_=data; }
private:
T data_;
};

And for a certain type I would like to add a function, but also have functions from the template class.

template <>
class base<int>{
public:
   void set(int data) { data_=data; }
   int get(){ return data_;} //function specific to int
private:
    int data_;
}

How to do that without copying all members from the template class?

like image 288
Kalamkas Avatar asked Dec 31 '25 19:12

Kalamkas


1 Answers

With inheritance:

template <typename T> struct extra {};

template <> struct extra<int> {
public:
    int get() const;
};

template <typename T>
class base : public extra<T> {
    friend class extra<T>;
public:
   void set(T data) { data_=data; }
private:
    T data_ = 0;
};

int extra<int>::get() const{ return static_cast<const base<int>*>(this)->data_;}

Demo

like image 94
Jarod42 Avatar answered Jan 02 '26 09:01

Jarod42



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!