使用具有特定派生类型的模板

时间:2014-04-19 15:29:32

标签: c++ templates smart-pointers reference-counting

我正在尝试创建一个具有一些引用计数对象的系统,这些对象是从同一个抽象类(“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"
    }
};

0 个答案:

没有答案