Чтобы все работало, не раздражаясь управлением памятью, я широко использую std::shared_ptr и std::unique_ptr, но когда дело доходит до вызова внутренней функции C, у меня возникает куча вызовов get(), что меня раздражает.
Есть ли разумный способ заставить компилятор неявно вызывать саму функцию get(), когда он обнаруживает, что необходим необработанный указатель и что std::shared_ptr или std::unique_ptr< /code> задан?
Я знаю, что это можно сделать, написав явную оболочку вокруг std::shared_ptr, например:
< pre class="lang-cpp Prettyprint-override">
Код: Выделить всё
#include
#include
template
class SharedPtrWrapper {
public:
// Constructor
explicit SharedPtrWrapper(std::shared_ptr ptr) : ptr_(ptr) {}
// Overload the dereference operator
T& operator*() const {
return *ptr_;
}
// Overload the arrow operator
T* operator->() const {
return ptr_.get();
}
// Implicit conversion to the raw pointer
operator T*() const {
return ptr_.get();
}
private:
std::shared_ptr ptr_;
};
// Example usage
class MyClass {
public:
void display() const {
std::cout display(); // Access through the wrapper
functionThatNeedsRawPointer(wrapper); // Implicitly converts to raw pointer
return 0;
}
Код: Выделить всё
template
std::shared_ptr::operator T*() {
return this->get();
}
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/787 ... ting-class
Мобильная версия