複数のレイヤーを介して一部のコンテンツがベクターに追加される、次のことを検討してください。
class A {
public:
void Add(Content c) {
// Considerable amount of checking code here.
v.push_back(c);
}
private:
std::vector<Content> v;
};
class B {
public:
void Add(Content c) {
// Considerable amount of additional code here.
a.Add(c);
}
private:
A a;
};
class C {
public:
void Add(Content c) {
// Considerable amount of additional code here.
b.Add(c);
}
private:
B b;
};
これは続けることができますが、ここで要点がわかります。コンテンツをコピーまたは移動、つまり push_back(const Content&) または push_back(Content&&) のいずれかで追加したい。呼び出し元は、次のいずれかを呼び出すことができる必要があります。
C c;
Content z;
c.Add(z);
また
c.Add(move(z));
最小限のコピーを取得します。
追加のコードを複製せずに、関数の追加テンプレート関数を作成せずにこれを達成する方法はありますか?