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;
};
当分配std :: string时,你可能想要复制字符串(即分配一个char数组并执行一个strcpy)而不是分配内部字符串指针 – Asaf 2012-08-14 10:17:19
Asaf:'strdup()'比手册分配和复制。但除此之外,你是对的。 – Constantinius 2012-08-14 10:31:21