gpt4 book ai didi

c++ - 在没有继承的情况下向 C++ 类添加功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:26:54 25 4
gpt4 key购买 nike

我需要一个缓冲类。我发现“std::vector”非常有用,但我不喜欢这样做,例如:

typedef std::vector<char> Buffer;
Buffer buff1;
Buffer buff2;
...
buff1.insert(buff1.end(), buff2.begin(), buff2.end())

每次我想追加......我想要一些concat方法,比如:

buff1.append(buff2)

或运算符+=或其他东西。

现在,我尝试添加这个方法:

void append(dataStructures::Buffer& self, const dataStructures::Buffer& other)
{
self.insert(self.end(), other.begin(), other.end());
}

并简单地调用它:buff1.append(buff2)但它不会编译,原因是:std::vector<byte, std::allocator<byte>>" has no member "append" .没错。我也曾尝试将“ self ”作为指针,但没有成功。它在将 operator<< 添加到 std::ostream 时确实起作用,所以我真的希望它起作用,但我错了。

当然,我可以使用继承机制创建一个 Buffer,但是 std 容器没有虚拟 Dtor,所以这可能是个坏主意(虽然我没有添加任何成员变量……仍然是个坏主意) .

有什么办法可以做我想做的事吗?我知道这只是可读性的问题,但这对我来说很重要。我想知道是否有一个简单的解决方案,或者我唯一的选择是实现一个代理类或一个全新的 Buffer 类(我试过使用 boost 的 Buffer,但它不分配内存,据我所知).

非常感谢。

最佳答案

如果不从类中派生出新类,就不能向类中添加新方法。您通过定义一个独立的辅助函数走在了正确的轨道上,但是您调用它的方式是错误的:

//buff1.append(buff2) 
append(buff1, buff2) ;

关于c++ - 在没有继承的情况下向 C++ 类添加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18087926/

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