我需要一個緩衝區類。我找到了「的std ::矢量」非常有用的,但我不喜歡,例如,要做到這一點:向繼承的C++類添加功能
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"
。那是對的。我也試圖讓「自我」成爲一個指針,但沒有成功。它在將運算符< <添加到std :: ostream時確實有效,所以我真的認爲它可以工作,但我錯了。
我當然可以使用繼承機制創建一個Buffer,但std容器沒有虛擬Dtor,所以這可能是一個壞主意(儘管我沒有添加任何成員變量......仍然是一個壞主意)。
有沒有辦法做我想要的?我知道這只是一個可讀性問題,但它對我很重要。我想知道是否有一個簡單的解決方案,或者我唯一的選擇是實現一個代理類或一個全新的Buffer類(我嘗試過使用boost的Buffer,但它沒有分配內存,就像我理解的那樣)。
非常感謝。
[Yakk](http://stackoverflow.com/users/1774667/yakk)[to the rescue](http://stackoverflow.com/a/16845998/420683)!雖然......嗯......我不知道我是否應該推薦這種方法。 – dyp
我在嘗試谷歌解決方案時看到了這一點。很酷的是它非常複雜,但工作。關於這段代碼的其他方面都很糟糕......我仍然無法理解它。我正在尋找一段優雅的代碼,因爲我的意圖是儘可能讓我的代碼可讀(除了我真正需要快速運行的關鍵部分之外)。但無論如何,謝謝你,我想我可以從這個代碼學習:) –