【发布时间】:2021-09-17 18:38:54
【问题描述】:
这里有两个基本不相关的类:
class A {};
class B {};
以及检查这两个A 和B 类的可转换性的概念:
template<typename FROM, typename TO>
concept SafelyConvertible =
is_convertible<typename FROM::pointer, typename TO::pointer>::value &&
!is_array<typename TO::element_type>::value
;
上述 SafelyConvertible 概念中的 FROM 和 TO 预计是自定义智能指针实现,提供指针 typedef:
template<typename T>
class smart_ptr {
using pointer = T*;
...
};
目标只是使A 可转换为B,以便将概念SafelyConvertible 评估为true。
我尝试在 B 中实现转换构造函数:
class B {
B( const A & other ) { ... }
B( A && other ) { ... }
};
但不知何故,它并没有使 A 转换为 B...提前感谢任何愿意提供帮助的人
【问题讨论】:
-
您正在尝试检查
A*是否可以转换为B*,而不是A是否可以转换为B,因此复制构造函数在这里实际上是无用的。 C++ 并没有隐式地允许不同类型的指针相互转换。 -
@Ruks - 好的,那么如何使指针显式可转换?有什么提示吗?
-
要使指针可转换,您需要在
A和B之间建立某种继承关系。
标签: c++ constructor type-conversion c++20