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