typedef shared_ptr <T>преобразование в bool - PullRequest
2 голосов
/ 05 апреля 2019

У меня есть typedefined shared_ptr <>, который я использую в условной проверке.

Вот как это определяется:

typedef std::shared_ptr<T> typeTPtr;

Затем я передаю его функции, принимающейаргумент bool:

void Foo(bool);

Когда я пытаюсь сделать:

typeTPtr ptrT = ...
Foo(ptrT);

Я получаю сообщение об ошибке, говорящее, что

не может преобразовать аргумент из T вbool

Я считаю, что в std :: shared_ptr явно определен оператор bool.Почему компилятор не конвертирует shared_ptr в bool?Я использую Visual C ++ 2017

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

У него действительно есть оператор bool, но этот оператор explicit, поэтому вы должны выполнить приведение:

foo(static_cast<bool>(ptr));

Обратите внимание, что нет необходимости в приведении внутри if заявление, потому что это считается явным преобразованием.

1 голос
/ 05 апреля 2019

operator bool() из shared_ptr помечено explicit. Так что неявные преобразования невозможны.

Используйте взамен static_cast для явного преобразования.

...