我正在實現對某些對象的向量進行操作的函數,爲了簡單起見,我們假設它計算總和。獨立於元素內存管理的向量上的函數
函數的邏輯與它的對象矢量,對象的原始指針或唯一/弱/共享指針無關。
如何在不重複代碼的情況下以最小的開銷爲用戶實現它?
編輯:
的解決方案適用於不同的指針,而不是對象。好吧,也許沒有辦法繞開它,除非在任何地方使用指針,並強制用戶創建指針向量,如果他想使用該函數。至少比其他方式更容易。
我想盡可能保持我的對象類型,因爲我對它很滿意。現在不是運動員的載體,窗口小部件,矩陣或任何有意義的事情,我被迫使用T.在這種情況下,我很想有像template <class T extends MyLovelyClass>
,但是這並不是C++ ...
#include <vector>
#include <memory>
class A{
public:
int get(){return 1;}
};
template<typename T, typename Iterator>
int sum(Iterator begin, Iterator end) {
T result = {};
for(auto it = begin; it != end; ++it) {
result += (*it)->get();
}
return result;
}
int main(){
std::vector<A> v(10);
std::vector<A*> w(10);
std::vector<std::shared_ptr<A>> u(10);
for (int i = 0; i < w.size(); i++){
w[i] = new A();
}
for (int i = 0; i < u.size(); i++){
u[i] = std::make_shared<A>();
}
//sum<int>(v.begin(), v.end()); //doesn't work
sum<int>(w.begin(), w.end());
sum<int>(u.begin(), u.end());
}
像標準庫一樣做,並採用開始和結束迭代器並處理範圍'[begin,end]'。 – NathanOliver
將算法包裝成模板函數。 –
@πάνταῥεῖ你可以擴展嗎?我看不出如何使用相同的模板作爲指針和對象。在模板函數中,我需要T> getSomething()或T.getSomething(),對嗎? – Utka