Please notice C++03 is what I really need, but for knowledge sake, I would like to see some more pretty implementations in C++11 as well.
I need a template class
template <typename T>
class A {
private:
T m_member;
public:
A(T _member);
//... MORE STUFF
void foo(T param);
};
I need:
1) If A is compiled with a value type (including pointers, which by themselves are passed by value):
Then I need A to look like this (exactly like above)
class A {
private:
T m_member;
public:
A(T _member);
//... MORE STUFF
void foo(T param);
};
2) If A is compiled with a reference type (for example int&
):
Then I need A to look like this:
class A{
private:
T& m_member;
public:
A(T& _member);
//... MORE STUFF
void foo(T param); // still the same T, not T&
};
If I knew A received only ints, then i would be able to use specialization. But any type can be used by A's user:
main.cpp
A<int> a1;//1st version
A<int&> a2;//2nd version
A<B> a3;//1st version
A<B&> a4;//2nd version
A<C*> a5;//1st version