当前位置:  开发笔记 > 编程语言 > 正文

boost :: any_cast - 仅在隐式转换不可用时抛出?

如何解决《boost::any_cast-仅在隐式转换不可用时抛出?》经验,为你挑选了1个好方法。

我想boost::any_cast只在any没有隐式转换的类型时抛出异常T.正常行为似乎是抛出异常,如果类型any不是T,无论隐式转换如何.

例:

boost::any a = 1;
boost::any_cast(a); // This succeeds, and rightfully so
boost::any_cast(a); // I don't want this to throw
boost::any_cast(a); // I want this to throw

谁能告诉我是否有一种简单的方法来获得我想要的功能,或者更好地为我提供一个很好的理由来解释为什么现有的行为是这样的?



1> Johannes Sch..:

那么你不能这样做.该any机制的工作原理如下:

struct base {
    virtual ~base() { }
};

template
struct concrete_base : base {
    T t;
    concrete_base(T t):t(t) { }
};

struct my_any {
    base * b;

    template
    my_any(T t):b(new concrete_base(t)) { }

    template
    T any_cast() { 
        concrete_base * t = dynamic_cast< concrete_base* >(b);
        if(!t) throw bad_any_cast();
        return t->t;
    }
};

我希望上面的内容清楚.我认为你无法做你正在寻找的事情.原因是没有关于保留的类型的信息在这里可能有用.RTTI不提供它.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有