C ++ неявное преобразование дает власть кодеру.С помощью одного оператора преобразования можно значительно расширить интерфейс класса.Это то, что вы хотите сделать, и я думаю, что это хорошая идея.
Но вы должны знать, что неявные преобразования приводят к быстрому росту сложности кода.Красота возникает из-за сложности, но хаос никогда не бывает далеко.Итак, мы должны научиться справляться со зверем!Итак, попрактикуемся.
Преобразования, выполняемые операторами преобразования, называются преобразованиями, определенными пользователем.В процессе преобразования аргумента в параметр функции может иметь место только одно пользовательское преобразование.Таким образом, даже если у shared_ptr
был оператор преобразования для указателя, который он содержит, вы все равно получите ошибку.
Таким образом, вы должны объявить оператор преобразования из shared_ptr<texture_t>
, но это невозможно, потому что операторы преобразования должны бытьфункции-члены.Таким образом, один из вариантов может быть производным от shared_ptr
:
class texture_ptr_t
:public std::shared_ptr<texture_t> {
operator SDL_texture*() const{
return *get();
}
};
Теперь вам нужно тщательно спроектировать этот класс, этот неявно конвертируется в shared_ptr<texture_t>
через преобразование из производного в базовое ... Может быть, этоне проблема или, может быть, это вызовет проблемы позже.