我有一个类型定义的shared_ptr <>,我将在条件检查中使用它。
这是它的定义方式:
typedef std::shared_ptr<T> typeTPtr;
然后我将其传递给带有bool参数的函数:
void Foo(bool);
当我尝试做时:
typeTPtr ptrT = ...
Foo(ptrT);
我收到一条错误消息
无法将参数从T转换为bool
我相信std :: shared_ptr具有明确定义的布尔运算符。 为什么编译器没有将shared_ptr转换为bool? 我正在使用Visual C ++ 2017
谢谢。
答案 0 :(得分:2)
它确实有一个运算符bool
,但是此运算符是explicit
,因此您应该执行强制转换:
foo(static_cast<bool>(ptr));
请注意,if
语句内部不需要强制转换,因为它被视为显式转换。
答案 1 :(得分:1)
shared_ptr
中的operator bool()
被标记为explicit
。因此,隐式转换是不可能的。
使用static_cast
进行显式转换。