gpt4 book ai didi

c++ - 将功能委托(delegate)/转发给成员(组合)

转载 作者:太空狗 更新时间:2023-10-29 21:47:09 25 4
gpt4 key购买 nike

假设我有课

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

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

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

有什么方法可以在编译时将函数(或运算符)委托(delegate)给_vector,而不会产生开销

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

This article 提出我需要的东西。例如使用这个:

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或不小debatable ,但这是您的代码。

<罢工>第二种方式:如果你对构图很讲究,那就制作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()

关于c++ - 将功能委托(delegate)/转发给成员(组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com