将typedef shared_ptr<T>转换为bool

3

我有一个使用在条件检查中的typedef 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。

谢谢。


我猜两个答案都是正确的,所以应该接受其中一个! - Benjamin Bihler
2个回答

3

实际上,它确实拥有一个名为bool的运算符,但是这个运算符是explicit的,因此您应该执行转换:

foo(static_cast<bool>(ptr));

请注意,在if语句内部不需要进行类型转换,因为它被认为是一种显式转换。

2
< p >shared_ptroperator bool()标记为explicit,因此不支持隐式转换。

请改用static_cast进行显式转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接