Создайте новый оператор для существующего классаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Создайте новый оператор для существующего класса

Сообщение Anonymous »

Я работаю на C++ с библиотекой C, которая использует множество указателей в своем API.
Чтобы все работало, не раздражаясь управлением памятью, я широко использую 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»