删除对特定类型的指针的依赖关系

Removing dependancy to a pointer of a specific type

本文关键字:指针 关系 依赖 类型 删除      更新时间:2023-10-16

我正在包装一个具有以下结构的C api:

typedef struct Value
{
    union 
    {
        int i;
        const char* s;
        bool b;
        struct StructureMember_T* firstStructureMember
        double d;
    } value;
} Value_T;

我使用setter函数从C++设置此结构中的值。

class ValueSetter : public IValueSetter
{
public:
    explicit ValueSetter(Value_T* value) : _value(value)
    {
    }
    void operator()(int8_t v) const
    {
        _value->value.i = v;
    }
    ...
    void operator()(std::string& s) const
    {
        _value->value.s = s.c_str();
    }
    void operator()(Structure& s) const
    {
        _value->value.firstStructureMember = s.getFirstMember();
    }
private:
    Value_T* _value;
};

为了处理StructureMember_T*,我添加了以下我不满意的类。例如,它的接口依赖于来自 c API 的StructureMember_T。关于另一种方法的任何建议?稍后我将向结构类添加更多功能。

class Structure
{
public:
    explicit Structure(Value_T* firstMember)
        : _firstMember(firstMember)
    {
    }
    StructureMember_T* getFirstMember()
    {
        return _firstMember;
    }
    void setFirstMember(StructureMember_T* firstMember)
    {
        _firstMember = firstMember;
    }
private:
    StructureMember_T* _firstMember;
};

鉴于您的目标,我认为在 C++ API 中使用二传手和获取器并没有问题。

如果你真的想隐藏它,我建议简单地让 Value 成为结构的朋友,并将 get/set 方法设置为私有。