g ++有时会产生相当复杂的输出.特别是在处理模板时.有没有什么工具可以让g ++输出更具可读性?......至少有些颜色?
在这里提出这个问题可能听起来很愚蠢,但我一直无法用谷歌来解决这个问题.
当他们说C++的错误消息在模板方面非常糟糕时,我真的开始明白人们的意思了.我已经看到了一些非常长的错误,就像一个与原型不匹配的函数一样简单.
有没有解决这些错误的技巧?
编辑:我正在使用gcc和MSVC.它们似乎都非常可怕.
如何使适配器类适当地支持const和非const底层数据?
RigidBody是描述对象物理属性的类.
这是它非常简化的版本(1D): -
class RigidBody{
float position=1;
public: float getPosition()const{ return position;}
public: void setPosition(float ppos){ position=ppos;}
};
Run Code Online (Sandbox Code Playgroud)
Adapter封装RigidBody.
它提供了一个小失真的功能get/set position: -
class Adapter{
public: RigidBody* rigid; int offset=2;
public: float getPosition(){
return rigid->getPosition()+offset; //distort
}
public: void setPosition(float ppos){
return rigid->setPosition(ppos-offset); //distort
}
};
Run Code Online (Sandbox Code Playgroud)
我可以RigidBody通过以下方式间接设定位置Adapter: -
int main() {
RigidBody rigid;
Adapter adapter; //Edit: In real life, this type is a parameter of many function …Run Code Online (Sandbox Code Playgroud) 问题不在于Linux内核.它也不是C与C++的争论.
我做了一项研究,在我看来,C++在嵌入式系统的异常处理和内存分配方面缺乏工具支持:
为什么linux内核没有在C++中实现? 除了公认的答案,请参阅Ben Collins的回答.
"[...]任何为C++设计内核模块的人都是[...]
(b)无法看到他正在编写的C++偏见,实际上只是C"" - 整个C++异常处理事情从根本上被打破了.对于内核来说尤其突破.
- 任何喜欢隐藏内存分配等内容的编译器或语言都不是内核的好选择."
"不得使用AV规则208 C++例外"
异常处理和内存分配是C++显然缺乏工具支持的唯一要点(在此上下文中)?
要解决异常处理问题,必须提供时间限制,直到抛出异常后才捕获异常?
你能解释一下为什么内存分配是个问题吗?如何克服这个问题,必须做些什么?
正如我所看到的,在这两种情况下,必须在编译时为发生的非常重要的事情提供上限,并在运行时依赖于事物.
回答:
在C++中使用模板时,任何错误都会导致编译器发出大量输出.在大多数情况下,当我处理某些信息时,大部分信息都是噪音,我必须滚动查找我感兴趣的信息,例如:
std::string,写为std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >或扩展的typedef/alias声明.我更希望将它们展开以便于阅读.是否有可能在g ++或clang中减少任何这种更短/更简单的输出?
显然,信息可能很重要,但是我宁愿再次编译更详细,默认情况下保持简短.