- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我想将 dynamic_cast
与 shared_ptr
一起使用,我可以使用 dynamic_pointer_cast
。如果我想转换 auto_ptr
,我该用什么?我假设如下所示。
struct B : A { };
...
auto_ptr<A> base( ... );
auto_ptr<B> derive = dynamic_pointer_cast<B>(base);
我正在为 shared_ptr 使用 boost
最佳答案
auto_ptr<A> base( ... );
if(B* query = dynamic_cast<B>(base.get())) {
// take ownership
base.release();
auto_ptr<B> derived(query);
// use and/or pass derived around here
// ...
} else {
// no dice: leave base as owner
}
既然你已经这样做了,那就重构它,把它放在你选择的命名空间中,然后收工:
// Postcondition:
// where r is the returned pointer and p == from.get()
// EITHER r == 0 AND from.get() == p
// OR r.get() == dynamic_cast<To>(p) AND from == 0
template<typename To, typename From>
std::auto_ptr<To>
dynamic_pointer_cast(std::auto_ptr<From>& from)
{
To* query = dynamic_cast<To>(from.get());
return query ? from.release(), query : 0;
}
关于c++ - auto_ptr 和 dynamic_pointer_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581968/
这段代码有什么问题? class Event; class EventPtr : public std::shared_ptr { public: template std::shar
我在使用 std::dynamic_pointer_cast 时遇到问题 这是我正在尝试做的一个例子: class Base { public: Base() { } virtual
我正在构建一个工厂类,我需要在其中返回一个 unique_ptr到 BaseClass .返回的指针由 DerivedClass 组成使用 make_shared 转换为共享指针的对象然后转换成想要的
考虑以下 C++ 程序: #include struct A {}; struct B : A {}; int main() { auto x = std::make_shared();
我正在尝试实现一个字符工厂,但我不明白如何为虚拟基类创建一个通用的 shared_ptr,然后将其转换为在构造函数中带有参数的派生类。在我的示例中,我的虚拟基类不能在构造函数中使用参数,但我需要在派生
我写了一个最小的例子来测试一些行为。我试图让 std::dynamic_pointer_cast 失败,但遇到了意外行为。 这是我使用的最小示例: //virtual_ipsum.h class vi
我遇到了一个问题,我将在发布代码后进行解释: template std::shared_ptr getWidget(const std::string& id) { auto iter = fi
我正在尝试为 std::dynamic_pointer_cast 创建别名,但无法编写可编译的东西。 这是我正在尝试的方式: template using dcast = std::dynamic_
如果我想将 dynamic_cast 与 shared_ptr 一起使用,我可以使用 dynamic_pointer_cast。如果我想转换 auto_ptr,我该用什么?我假设如下所示。 struc
为什么这段代码不起作用? std::shared_ptr e = ep->pop(); std::shared_ptr t; t = std::dynamic_pointer_cast(e); 我收到
以下代码片段是我遇到的一个问题的 MWE std::dynamic_pointer_cast : #include #include class foo { private: int x;
我使用智能指针实现了复合模式,它一直有效。 问题是我只能使用接口(interface)中实现的方法,如果不使用 dynamic_pointer_cast 就不能使用派生类中定义的方法,我不想要它. 我
我正在使用 boost::shared_ptr 和 boost::dynamic_pointer_cast。我有一个基类,一个继承自该基类的接口(interface),然后是一个继承自该基类的类。 所
是否可以通过引用从 dynamic_pointer_cast 获取返回值,还是会导致问题? struct A { }; struct B : public A { }; int main() {
我有一个如下所示的智能指针类: template class Sptr { template friend class Sptr; template friend bool
谁能给我解释一下: shared_dynamic_cast 和 dynamic_pointer_cast 来自 Boost 库? 在我看来它们可能是等价的。 最佳答案 给定一个 shared_ptr
必要的解释:我必须使用 C++98,别无选择,是的,我已经向我的芯片供应商索要更新的工具链,不,我不会很快得到 C++11(哭)。 问题:我已经基于 this 实现了自己的共享指针(关于为什么我不应该
假设我有两个类,A 和 B,其中 B 是 A 的子类。 我还有以下功能: void foo(boost::shared_ptr a) { boost::shared_ptr b = boost
我开始在 C++0X/11 中使用智能指针,但遇到了一个特殊情况。我想使用 shared_ptr 向上转换一个对象的实例。 Extend 类继承自 Base 类,其中 Base 类具有虚拟析构函数以使
为什么我会收到以下代码的以下错误? 1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259): error C2683: 'dynamic_ca
我是一名优秀的程序员,十分优秀!