0

I am trying to make a template method that takes a default value for the template parameter. What I did:

In the class header file:

class MyClass{
    public:
        MyClass();
        ~MyClass() = default;
        template<class T = Peripheral>
        T* getPeripheral(int id);

    private:
        unordered_map<int, Peripheral*> _peripherals;

}

In the cpp file:

template<class T>
T* MyClass::getPeripheral(int id){
    return (T*)_peripherals.at(id);
}

And I want to be able to do the following to avoid casting each time:

SensorType1* sensor = myClass.getPeripheral<SensorType1>(1);
Peripheral* peripheral = myClass.getPeripheral<>(0);

When I run the code above I get undefined reference to myClass::getPeripheral<SensorType1>(int) and undefined reference to myClass::getPeripheral<Peripheral>(int)

I simplified a lot the code just to give you an idea of what I am looking for, the idea is just to avoid doing the cast outside and because it's not always needed. It should be possible in c++17, isn't it?

0 Answers0