以下は、 のセマンティクスを変更して共有ポインタを実装する試みですoperator==
。
template <typename T>
struct deref_shared_ptr: private std::shared_ptr<T> {
using Base = std::shared_ptr<T>;
// ... using statements to include functionality from the base.
bool operator==(const deref_shared_ptr rhs) const {
return (**this == *rhs);
}
};
std::make_shared
このタイプに相当するものを実装するのに苦労しています。これは私の試みです:
template< class T, class... Args >
deref_shared_ptr<T> make_deref_shared( Args&&... args ) {
return reinterpret_cast<deref_shared_ptr<T>>(std::make_shared<T>(args...));
}
これは機能しません: コンパイラ ( g++ 5.4.0
) は無効なキャストについて文句を言います。なぜ機能しないのですか? このキャストの代わりに何をすべきですか?