将功能委托/转发给成员(组合)
Delegate/forward function to member (composition)
假设我有这个类
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&);
}
};
然后,编译器将生成相应的代码。但是我没有找到这样的东西,可能吗?
第一种方法:您可以公开继承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()
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 访问组合类 c++ 的成员
- 将类成员数组组合到单个数组时性能下降
- 组合构造函数从成员变量中获取变量
- 如何在组合中在运行时更改成员对象?
- 如何将成员函数传递给接受函数指针的组合成员?
- 将功能委托/转发给成员(组合)
- 使用在组合类中计算的数据构造成员类
- 通过组合的其他成员访问'has-a'关系中的成员
- C++03 解析调用成员函数时的圆组合
- 指向类组合中成员函数的指针
- 组合常量和非常量引用数据成员的单个类
- 类组合构造函数 d 必须显式初始化引用成员
- 是否可以将const char*成员初始化为char数组的组合?
- 如何在具有8位成员的队列中前进,并将耦合组合为16位值
- 继承、组合和多成员变量的优点/缺点
- 如何将值正确设置为相同类型的组合成员