Suppose I have something like:
template
void do_something(T t){
pass_it_somewhere(t);
t->do_something();
}
Now it wo
Soultion 1
Use template specialization:
template
void do_something(T t){
pass_it_somewhere(t);
t.do_something();
}
template
void do_something(T* t){
pass_it_somewhere(t);
t->do_something();
}
Solution 2
Add a user-defined pointer operator in class T:
class A
{
public:
void do_something() const {}
const A* operator->() const { return this; }
};
template
void do_something(T t){
pass_it_somewhere(t);
t->do_something();
}