void(void *を内部データ構造体にのみ提供する)Cライブラリからの適切に管理されたリソースに対して、カスタムdeleterでvoidのQScopedPointerを作成しようとしています。私は、ボイドのQScopedPointerをインスタンス化しようとすると、 はしかし、私はこのエラーを取得する:スマートポインタへのvoidへのポインター
/Library/Frameworks/QtCore.framework/Headers/qscopedpointer.h:104:14:
error: cannot form a reference to 'void'
inline T &operator*() const
(from Clang)
またはこの:
/Library/Frameworks/QtCore.framework/Headers/qscopedpointer.h:104:
error: forming reference to void
(from GCC)
私はQScopedPointerを特化するか、カスタム削除手段との基本的なスコープのポインタを書くことを考えましたしかし、どちらの場合も、私はQScopedPointerとまったく同じコードを複製することになります。
コンパイラがもう文句を言うことがないように、特定の関数を削除(または特殊化)する方法はありますか?
カスタムscoped-ptr-to-voidを作成し、その実装をQScopedPointer-to-charに委譲します。 –
ダミータイプの 'struct MYDUMMY {}'を作成し、 'void *'を 'MYDUMMY *'にキャストし、それを特化します。問題は解消されます。 C関数のインラインラッパーを作成して、すべての型がきれいになるようにすることができます。 – Ben
通常は、あなたが格納しているデータの種類が何であるかを知っています(そして、 'void'の代わりにそのタイプのポインタを使うことができます)、またはポインタを所有していません(そしてスコープのないポインタには意味がありません)。 'void *'のスコープ付きポインタが必要ですか? – Lol4t0