- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
class GAGenome {
virtual void method(){};
};
template <class T>
class GAArray {
};
template <class T>
class GA1DArrayGenome : public GAArray<T>, public GAGenome {
};
int main() {
GA1DArrayGenome<float> genome;
const GAGenome & reference = genome;
auto cast = dynamic_cast<const GA1DArrayGenome<int> &>(reference);
}
这个明显错误的程序(因为模板参数不同)崩溃了
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
Aborted (core dumped)
除了运行时错误消息之外,是否有一种方法可以准确诊断出哪里出了问题?可以向我指出 int/float 错误的东西吗?我正在寻找描述性错误消息,例如
const GA1DArrayGenome<float> &
cannot be cast toconst GA1DArrayGenome<int> &
更好的是,由于 C++ 类型有时会变得毛茸茸,该工具可以注意到模板参数中的精确差异。
最佳答案
您也可以放弃直接使用 dynamic_cast
并将其包装在您自己的模板机制中:
#include <sstream>
class my_bad_cast: public std::bad_cast {
public:
my_bad_cast(char const* s, char const* d): _source(s), _destination(d) {
#ifdef WITH_BETTER_WHAT
try {
std::ostringstream oss;
oss << "Could not cast '" << _source
<< "' into '" << _destination << "'";
_what = oss.str();
} catch (...) {
_what.clear();
}
#endif
}
char const* source() const { return _source; }
char const* destination() const { return _destination; }
#ifdef WITH_BETTER_WHAT
virtual char const* what() const noexcept {
return not _what.empty() ? _what.c_str() : std::bad_cast::what();
}
#endif
private:
char const* _source;
char const* _destination;
#ifdef WITH_BETTER_WHAT
std::string _what;
#endif
// you can even add a stack trace
};
template <typename D, typename S>
D my_dynamic_cast(S&& s) {
try {
return dynamic_cast<D>(std::forward<S>(s));
} catch(std::bad_cast const&) {
throw my_bad_cast(typeid(S).name(), typeid(D).name());
}
}
关于c++ - 如何调试 std::bad_cast 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391649/
我在 Linux 上使用带有 clang++ 的 cmake。我遇到了一些链接器问题: Linking CXX executable "/run/media/toi/Storage E/Dropbox
万一dynamic_cast失败 bad_cast抛出异常。在我的代码中有一个单独的异常层次结构和 bad_cast不在该层次结构中,因此我的代码无法处理 bad_cast .我可以抛出一些其他异常吗
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我正在尝试一个虚拟模板函数实现。我在将 this 指针转换为指向子类模板的指针时可以正常工作,但是当我将 *this 转换为对子类的引用时我无法正常工作,为什么? template struct B
我仍然想知道为什么下面给出了 std::bad_cast 异常 #include class A {virtual void fun() {}}; class B : public A {}; in
dynamic_cast 抛出 bad_cast 异常,如果你转换一个引用,但据我所知,标准指针被视为引用,即指针是一种引用类型。 那么我应该在投指针时得到 bad_cast 吗? 这个问题来自 th
这个问题在这里已经有了答案: What is object slicing? (18 个答案) 关闭 7 年前。 我正在尝试了解 dynamic_cast 的工作原理。我有一个类 interface
我在为 dynamic_cast 使用异常处理时遇到了一些问题。它不会总是返回 bad_cast。 尽管 d1 返回 nullptr 并且编译器向我显示警告,但下面的语句没有向我抛出 bad_cast
class GAGenome { virtual void method(){}; }; template class GAArray { }; template class GA1DArra
是否可以抛出 std::bad_cast 的实例?根本的问题不是这样做好不好,而是关于 std::bad_cast 是否有默认构造函数。 谢谢 最佳答案 C++ 标准的 18.5.2 说"is",它有
为什么当失败时返回std::bad_cast时需要Null? 我了解到dynamic_cast失败时,它会返回Null,因此我可以检查Null是否已返回,这意味着发生了错误。 但是,为什么std::b
为什么下面的代码会产生std::bad_cast异常? #include #include #include int main() { std::basic_string reg = U
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在下面的代码中,在将 derived.properties_ 从 BaseProperties 转换为 DerivedProperties 时,我得到了一个 std::bad_cast 异常抛出。查看
我有一个基类和一个派生类,如果 base 是基类的对象,我有一行会给我错误 std::bad_cast 。为什么它给我那个错误?并尝试我看到 static_cast 有效,但我不知道为什么。 行是:
关于 std::bad_cast 异常,我注意到引用和指针的行为方式似乎不同。例如: class A { public: ~A() {} }; class B : public A {}; //Cas
我正在尝试使用以下代码从文件中读取数据。 (请注意,您需要在 GCC 上启用 C++11 功能才能进行此编译。) #include typedef unsigned char byte; int m
我正在尝试开始使用 Boost for C++。这是一个用 g++ -Wall test.cpp/usr/local/Cellar/boost/1.55.0/lib/libboost_locale
我正在尝试使用 ANTLR4 解析表达式。因此,我正在使用访问者模式并创建一个抽象语法树。 结果可以是一个表达式或其他东西(我从这个示例代码中删除了)。访问者期望返回类型 antlrcpp::Any所
为简单起见, class Parent {} class Child1 : Parent {} class Child2 : Parent {} 在其他地方,我创建了 Child1 和 Child2
我是一名优秀的程序员,十分优秀!