我有以下课程:
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 将其数据存储在联合缓冲区中。我将 ValueSetter 传递给不了解 CContainer 的 Container 类。事实上,在未来,我希望 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;
我怎样才能做到这一点?