0
我想要寫簡單的C++包裝(用於RAII目的)圍繞以下C API的數組:重釋播送對象
typedef void* T;
T createT(Arg arg);
int foo(T t);
closeT(T t);
int bar(const T* ptrToArrayOfT, unsigned long size);
對於前三種功能很簡單(對於shortiness我省略檢查錯誤和引發異常):
class C {
public:
C(Arg arg) : t_(createT(arg)) {}
~C() { closeT(t_); }
int doFoo() { return foo(t_); }
private:
T t_;
}
至於bar
我想有功能具有以下簽名:
int doBar(const vector<C>& vec);
這裏是我正在考慮實現它:
int doBar(const vector<C>& vec) {
static_assert(sizeof(C) == sizeof(T));
return bar(reinterpret_cast<const T*>(vec.data()), vec.size());
}
它是安全的方式呢? (我懷疑是因爲C
有私人會員)。如果不是,那麼有沒有什麼辦法可以實現bar()
而不會給出t_
C
的成員? (使用矢量不是必需的)。
的靜態斷言是沒有意義的,因爲'T'被定義爲'無效*'。 –
@BartekBanachewicz,我沒有斷言「T」指向什麼大小。我斷言'C'與'void *'完全相同。 –
'bar'功能的用途是什麼? – Holt