私はいくつかのクラスのメソッド/アルゴリズム/関数のどれを使用するかを指定することができるようにするプロジェクトを開発しています。それぞれのメソッド "クラス"は同様の機能を提供し、他のクラスと互換性があります。静的クラス関数を使用するような派生クラスを使用できますか?
私は、派生クラスとメソッド「クラス」をベース抽象クラスでこれを実装しようとした:
class Method {
public:
virtual int function1(int) = 0;
virtual int function2(int, int) = 0;
};
class Method1 : public Method {
public:
int function1(int a) {
return a * 2;
}
int function2(int a, int b) {
return a + b;
}
};
class Method2 : public Method {
public:
int function1(int a) {
return a/2;
}
int function2(int a, int b) {
return a - b;
}
};
void useMethod(int a, int b, Method& m) {
int result1 = m.function1(a);
int result2 = m.function2(a, b);
/* Do something with the results here */
}
int main() {
// Doesn't work, "type name is not allowed"
useMethod(1, 2, Method1);
useMethod(1, 2, Method2);
// Works, but seems unnecessary and less elegant
Method1 x;
useMethod(1, 2, x);
Method2 y;
useMethod(1, 2, y);
return 0;
}
問題は、私はMethod1
とMethod2
を使用できるようにする方法を見つけ出すように見えることはできませんということですそれらのインスタンスを作成せずに - 私は不必要なように見える、彼らはすべて同じ機能を提供するだけなので。 派生クラスを「静的」に並べ替えるために、インスタンスなしで利用できるようにする方法はありますか?あなただけ行うことができ
http://stackoverflow.com/questions/1820477/c-static-virtual-membersの可能な複製 – UnholySheep
また、私は継承がここでかなり正しいアプローチだとは思わない。私はテンプレートや関数ポインタ(または 'std :: function')を使用する方が意味をなさないと思っています – UnholySheep
@UnholySheep' std :: function'がより良い解決策を提供する方法について詳しく説明できますか?それは単なる関数ラッパーではありませんか? –