我正在包装一个具有以下结构的 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;
};