int と int& の両方を取るコンテナーを作成しようとしています。1つのクラスでそれを行うとうまくいきます:
template <class T>
class unified_class
{
public:
virtual void f(T &i){}
virtual void f(T &&i) {}
};
呼び出し:
unified_class<int> u;
u.f(8); // going to the second method
int a = 9;
u.f(a); // going to the first method
しかし、それを2つのクラスに分割しようとすると、奇妙なことが起こっています:
template <class T>
class base_class
{
public:
virtual void f(T &&i) { /* it never reaches here*/}
};
template <class T>
class derived_class : public base_class<T>
{
public:
using base_class<T>::f;
virtual void f(T &i){}
};
前から同じ関数呼び出しを呼び出すと、どちらの場合も派生クラスの f() が呼び出されます。
私は何かが恋しいですか?