我想編寫一個包裝c結構體的C++類。下面是一個簡單的例子爲 C結構:C++的C++類包裝器struct
struct POINT {
long x;
long y;
}
現在我假定這下面的類,但我不知道這是否是「高性能」,也不是很好的C++風格。我不想使用不必要的變量或函數調用。如果你改進了我的代碼,這將是非常好的:)。
這個類的基本思想是它只是結構的包裝器/處理器。這就是爲什麼setStruct
和getStruct
可以直接修改私有數據,並且它只是一個指針。其他成員總是被命名爲set<Attribute>
和get<Attribute>
。
如果你使用setStruct
唯一的缺點我可以想到的是,結構可以刪除由於範圍,使指針是「無效」。
namespace wrapper {
class POINT {
::POINT * POINT_;
public:
POINT() {
POINT_ = new ::POINT;
}
~POINT() {
delete POINT_;
}
inline void setX(long x) {
POINT_->x = x;
}
inline long getX() {
return POINT_->x;
}
inline void setY(long y) {
POINT_->y = y;
}
inline long getY() {
return POINT_->y;
}
inline void setStruct(::POINT * __POINT) {
POINT_ = __POINT;
}
inline ::POINT * getStruct() {
return POINT_;
}
};
}
爲什麼不只是保存2個LONG成員變量並定義一個隱式轉換運算符爲POINT?也絕對沒有理由持有指向:: POINT的指針而不是:: POINT本身。 – Borgleader
'_POINT'是[保留標識符](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c- identifier)。此外,除非可能在'std :: make_unique'中使用'new',直到C++ 14或者除非你是1%的人,否則實際上它必須具有特定的場景。 – chris
瞭解pimpl習語,以便在實現文件(.cpp)中使用你的POINT結構體(.cpp) –