I am trying to use templates to reduce the amount of duplicate code but cannot get the following code to compile.
template <class T>
class MyTemplate {
public:
virtual T doIt(T it) = 0;
virtual ~MyTemplate() = default; // Ensure a virtual destructor for proper cleanup
};
class StringTemplate : public MyTemplate<String> {
public:
String doIt(String it) override {
Serial.println(it);
return it;
}
};
class IntTemplate : public MyTemplate<int> {
public:
int doIt(int it) override {
Serial.println(it);
return it;
}
};
StringTemplate strTemplate;
IntTemplate intTemplate;
template <class T>
void process(MyTemplate<T>& templateInstance, T value) {
templateInstance.doIt(value);
}
void setup() {
Serial.begin(9600);
process(strTemplate, String("Hello, world!"));
process(intTemplate, 42);
}
I think that it is valid C++ code, but I get the following errors
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino:28:25: error: 'T' was not declared in this scope
void process(MyTemplate& templateInstance, T value) {
^
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino:28:25: note: suggested alternative: 'Tc'
void process(MyTemplate& templateInstance, T value) {
^
Tc
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino:28:26: error: template argument 1 is invalid
void process(MyTemplate& templateInstance, T value) {
^
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino:28:47: error: 'T' has not been declared
void process(MyTemplate& templateInstance, T value) {
^
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino: In function 'void process(int&, int)':
/home/hangstrap/Arduino/template_tutorial/template_tutorial.ino:29:22: error: request for member 'doIt' in 'templateInstance', which is of non-class type 'int'
templateInstance.doIt(value);
^~~~exit status 1
Thanks for your help