以下は機能しません:
std::vector<IRule*> vec;
RuleRangeDouble *rule = new RuleRangeDouble(0, 100);
vec.push_back(rule);
では、さまざまなルールのベクトルをどのように作成できるでしょうか。ポインターを使用する必要があることはわかっています...しかし、これを機能させるには他に何をしなければなりませんか? この作業を行うために基本構造を変更するにはどうすればよいですか?
次のようなインターフェイスを使用します。
// Interface
template <typename T>
class IRule
{
public:
virtual bool isValid(T value) = 0;
};
そして、私の例のクラスは次のようになります。
class RuleRangeDouble : public IRule<double>
{
private:
double min;
double max;
public:
bool isValid(double value)
{
....
};
};