私は次のクラスを持っています:
class ValueSetter: public IValueSetter
{
public:
explicit ValueSetter(CContainer* container)
: _container(container)
{
}
virtual void operator()(const int value, const int index) const
{
_container->values[index].value.i = value;
}
virtual void operator()(const double value, const int index) const
{
_container->values[index].value.d = value;
}
virtual void operator()(const std::string& value, const int index) const
{
...
_container->values[index].value.s = _strdup(value.c_str());
}
private:
CContainer* _container;
};
このクラスは、ユニオンのバッファにデータを格納する CContainer で動作します。CContainer の知識がない Container クラスに ValueSetter を渡します。実際、将来的には CContainer (C API 経由で受け取ったもの) がなくなり、代わりに値が std::vector または std::list に整理されることを望んでいます。このため、コンテナーのインターフェイスを変更する必要はなく、データがメモリにどのように格納されているかを気にする必要はありません。
これを念頭に置いて、代わりに大まかにこれらの行に沿ったものを好むでしょう:
class IntValueSetter: public IIntValueSetter
{
public:
explicit IntValueSetter(Container* container)
: _container(container)
{
}
virtual void operator()(const int value, const int index) const
{
_container->values[index].value.i = value;
}
private:
CContainer_3* _container;
}
また:
class IntValueSetter: public IIntValueSetter
{
public:
explicit IntValueSetter(std::vector<int> values)
: _values(values)
{
}
...
}
しかし、私は次のようにそれらを使用できる必要があります:
ValueSetter<int> valueSetter;
それ以外の
IntValueSetter valueSetter;
これどうやってするの?