我正在尝试编写一个同时接受 int 和 int& 的容器。在一堂课上做这件事:
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
但是当我试图将它分成两个类时,发生了一些奇怪的事情:
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()。
我错过了什么吗?