私はC + +の問題に興味深い繰り返しテンプレートパターンを使用しています。 同じメソッドを使用する特定のインスタンスでは、サブクラスまたは基本クラスを返す必要があります。オーバーロードされたメソッドのクラスはテンプレートとベースクラスを受け入れます - どのメソッドをデフォルトにするか?
そのため、私は、このような
template <typename deriv>
class base {
void run(deriv& d) {//deriv specific method/derived class/}
void run(base& b) { //base specific method// }
}
などの他の方法を持っていながら、12月には
base& get() {
return base_ref || deriv_ref; //depends on impl
}
ようなものになるだろう方法しかし、私はderived class
を返すたび(つまりはbase&
としてreinterpertedされる)メソッドのデフォルト以下に示すように、クラス実装のbase
に接続します。
template<typename d>
struct base {
void run(d& type) {
std::cout << "deriv " << std::endl;
}
void run(base& type) {
std::cout << "base" << std::endl;
}
base& alter(d& der) {
return der;
}
d& no_alt(d& der) {
return der;
}
};
struct deriv : public base<deriv> {
};
int main() {
deriv foo;
base<deriv> bar;
bar.run(foo); //prints deriv
bar.run(bar); //print base
bar.run(bar.alter(foo));//print base (Need this to print deriv)
bar.run(bar.no_alt(foo));//print deriv
}
これらのインスタンスでは、方法をデフォルトでderived_methods
にすることはできますか?
さらに、コンパイラは、(同じ型を受け入れる2つのメソッドが基本的に)不十分な警告を与えるべきだと思います。
私はあなたの質問を理解しているかどうか分からないが、私は見ることができるから、出力にエラーはない –
ちょっと、上記の方法は値ではなく参照であることを意味した。 –