0

我正在包装一个具有以下结构的 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。关于另一种方法的任何建议?稍后我将向 Structure 类添加更多功能。

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;
};
4

1 回答 1

1

鉴于您的目标,我认为在 C++ API 中使用 setter 和 getter 并没有什么问题。

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

于 2012-08-14T12:51:39.653 回答