3

假设我有课

template<class T>
class Vector
{
  public:
    Vector() = default;

    inline size_t size() const { return _vector.size(); }

  private :
    std::vector<T> _vector;
};

有没有办法在编译时将函数(或运算符)委托给 ,而无需_vector开销?

我当然可以(这就是我正在做的)通过声明我需要的每个函数来转发所有内容,并且只需向成员调用适当的函数,就像我对size().

这篇文章正是我所需要的。例如使用这个:

template<class T>
class Vector
{
  public:
    Vector() = default;

  private :
    std::vector<T> _vector;

  public:
    using _vector {
      size_t size() const;
      void push_back(const T&);
    }
};

然后编译器将生成适当的代码。但是我没有找到类似的东西,这可能吗?

4

1 回答 1

2

第一种方式:您可以公开继承std::vector<T>以使此类委托成为可能:

template<class T>
class Vector : public std::vector<T>
...

是否继承std::vector几乎没有争议,但那是你的代码。

第二种方式:如果你对组合很特别,那么让Vector<T>对象表现为智能指针:

template<typename T>
class Vector
{
  std::vector<T> _vector;    
public:
  std::vector<T>* operator -> () { return &_vector; }
};
Vector<int> vi;
vi->size(); // instead of vi.size()

第三种方式operator ():语法糖重载:

template<typename T>
class Vector
{
  std::vector<T> _vector;
public:
  std::vector<T>& operator ()() { return _vector; }
  const std::vector<T>& operator ()() const { return _vector; }
};
Vector<int> vi;
vi().size(); // instead of vi.size()
于 2012-12-04T09:15:39.947 回答