0

次の構造体を持つCAPIをラップしています。

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

セッター関数を使用して、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 *に対処するために、私は満足していない次のクラスを追加しました。たとえば、そのインターフェイスはcapiの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 でセッターとゲッターを使用することに問題はありません。

本当にそれを隠したい場合は、単純に Value を Structure のフレンドにして、get/set メソッドを非公開にすることをお勧めします。

于 2012-08-14T12:51:39.653 に答える