我想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
谁能告诉我是否有一种简单的方法来获得我想要的功能,或者更好地为我提供一个很好的理由来解释为什么现有的行为是这样的?
那么你不能这样做.该any
机制的工作原理如下:
struct base { virtual ~base() { } }; templatestruct 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不提供它.