作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个用于教育目的的智能指针类。当 U 类是 T 类的基础时,我希望能够执行以下操作。
ptr<T> t;
ptr<U> u = t;
我正在努力实现这个隐式转换,所以有人可以帮助我吗?
最佳答案
这是一个使用 std::is_base_of
的例子实现这一目标。
在example.h
:
#include <type_traits>
template <typename T>
class Example {
public:
template <
typename T2,
typename = typename std::enable_if<std::is_base_of<T, T2>::value>::type
>
Example (const Example<T2> &) {}
Example () = default;
};
正如预期的那样,以下程序编译成功:
#include <example.h>
class Foo {};
class Bar : public Foo {};
int main (int argc, char * argv []) {
Example<Bar> bar;
Example<Foo> foo = bar;
}
类 Bar
派生自类 Foo
, 所以 Example<Foo>
可以从 Example<Bar>
初始化.
同样如预期的那样,以下程序编译失败:
#include <example.h>
class Foo {};
class Baz {};
int main (int argc, char * argv []) {
Example<Baz> baz;
Example<Foo> foo = baz;
}
类 Baz
与类无关 Foo
, 所以 Example<Foo>
无法从 Example<Baz>
初始化. Clang 提供以下错误消息:error: no viable conversion from 'Example<Baz>' to 'Example<Foo>'
.
关于c++ - 智能指针实现的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232273/
我是一名优秀的程序员,十分优秀!