Обратите внимание, что С++ 03 - это то, что мне действительно нужно, но ради знания, я хотел бы увидеть еще несколько хороших реализаций на С++ 11.
Мне нужен класс шаблона
template <typename T>
class A {
private:
T m_member;
public:
A(T _member);
//... MORE STUFF
void foo(T param);
};
Мне нужно:
1) Если A скомпилирован со значением типа (включая указатели, которые сами по себе передаются по значению):
Тогда мне нужно, чтобы A выглядело так (точно так же, как указано выше)
class A {
private:
T m_member;
public:
A(T _member);
//... MORE STUFF
void foo(T param);
};
2) Если A скомпилирован с эталонным типом (например, int&
):
Затем мне нужен A, чтобы выглядеть так:
class A{
private:
T& m_member;
public:
A(T& _member);
//... MORE STUFF
void foo(T param); // still the same T, not T&
};
Если бы я знал, что A получил только ints, тогда я мог бы использовать специализацию. Но любой пользователь может использовать любой тип:
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