typedef shared_ptr <t>转换为bool

时间:2019-04-05 08:11:39

标签: c++ visual-c++ shared-ptr

我有一个类型定义的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

谢谢。

2 个答案:

答案 0 :(得分:2)

它确实有一个运算符bool,但是此运算符是explicit,因此您应该执行强制转换:

foo(static_cast<bool>(ptr));

请注意,if语句内部不需要强制转换,因为它被视为显式转换。

答案 1 :(得分:1)

shared_ptr中的operator bool()被标记为explicit。因此,隐式转换是不可能的。

使用static_cast进行显式转换。