Добавить неявное преобразование из unique_ptr <T> в T *

Общий вопрос: Не вдаваясь в подробности, является ли это хорошей идеей, как я могу добавить оператор неявного преобразования в класс, который уже был определен? Например, скажем, чтоЯ хочу, чтобы unique_ptr <T> неявно конвертировался в T *, но я не могу просто добавить оператор преобразования члена, потому что не могу изменить определение класса unique_ptr.

Опции:

Есть ли какой-нибудь c ++ voodoo, который я могу использовать, чтобы это произошло без создания функции-члена?
Ответ пока что: НЕТ.
Невозможно добавить неявное преобразование из типа, который нельзя изменить в коде.
Просто ... грусть

Могу ли я получить из std :: unique_ptr и добавить свою собственную функцию преобразования членов? Есть ли серьезные недостатки в этом?
Ответ пока что: да (от vsoftco)
Недостатки еще предстоит определить. До сих пор наследование от std :: unique_ptr, наследование его конструкторов и объявление оператора неявного преобразования работали великолепно, едва ли нужно писать какой-либо код.

Должен ли я жить без этого всю оставшуюся жизнь?
Ответ пока что: посмотрим ...
Если я смогу запустить вариант 2 и запустить его без каких-либо серьезных побочных эффектов или обременений, я протестирую его некоторое время и сообщу, думаю ли оно того. Посмотрим!

Пример кода:

#include <algorithm>
#include <memory>
#include <vector>

struct MyClass
{
    MyClass(int v) : value(v) {}

    int value;
};

int main()
{
    auto vec = std::vector<std::unique_ptr<MyClass>>();

    vec.push_back(std::make_unique<MyClass>(1));
    vec.push_back(std::make_unique<MyClass>(2));

    // error C2664: 'void (__vectorcall *)(MyClass *)' : cannot convert argument 1 from 'std::unique_ptr<MyClass,std::default_delete<_Ty>>' to 'MyClass *'
    std::for_each(std::begin(vec), std::end(vec), [](MyClass* myClass)
    {
        myClass->value += 3;
    });
}

Ответы на вопрос(1)

Ваш ответ на вопрос