#include <iostream>
#include "MyClass.h"
int main() {
MyClass<const char*> obj1;
obj1.set("Hello, Template World");
std::cout << obj1.get() << std::endl;
MyClass<int> obj2;
obj2.set(10);
std::cout << obj2.get() << std::endl;
}
#ifndef MY_CLASS_H
#define MY_CLASS_H
template<typename T>
class MyClass {
T var{};
public:
T get() const;
void set(T v);
};
#ifdef IMPL_VISIBLE
template<typename T>
T MyClass<T>::get() {
return var;
}
template<typename T>
void MyClass<T>::set(T v) {
var = v;
}
#endif
#endif // MY_CLASS_H
#include "MyClass.h"
#ifndef IMPL_VISIBLE
template<typename T>
T MyClass<T>::get() const {
return var;
}
template<typename T>
void MyClass<T>::set(T v) {
var = v;
}
#endif
template class MyClass<void*>;
template class MyClass<const char*>;
template class MyClass<int>;