我正在尝试创建一个具有一些引用计数对象的系统,这些对象是从同一个抽象类(“RCObject”)派生的。 另外,我正在尝试创建一个模板智能指针,该指针应该与从“RCObjects”派生的对象一起使用。
这段代码有办法运作吗? 哦,“RCObjects”是抽象的。
我得到的错误是我标记的函数// **:未在当前命名空间中定义。 (我不想在那里定义它们)
检查对象是否实现特定接口对我来说不那么重要。我正在寻找的是我的模板能够使用抽象类中的函数,我知道模板中的所有对象都来自
template<class T>
class Sptr
{
public:
Sptr(T* realPtr = 0) : pointee(realPtr)
{
init();
}
Sptr(const Sptr& rhs) : pointee(rhs.pointee)
{
init();
}
~Sptr()
{
if (pointee)pointee->removeReference(); //** this function is from "RCObjects"
}
Sptr& operator=(const Sptr& rhs)
{
if (pointee != rhs.pointee)
{
if (pointee) pointee->removeReference(); //** this function is from "RCObjects"
pointee = rhs.pointee;
init();
}
return *this;
}
T* operator->() const
{
return pointee;
}
T& operator*() const
{
return *pointee;
}
private:
T *pointee;
void init()
{
if (pointee == 0) return;
if (pointee->isShareable() == false) //** this function is from "RCObjects"
{
pointee = new T(*pointee);
}
pointee->addReference(); //** this function is from "RCObjects"
}
};