相关疑难解决方法(0)

改善g ++输出

g ++有时会产生相当复杂的输出.特别是在处理模板时.有没有什么工具可以让g ++输出更具可读性?......至少有些颜色?

在这里提出这个问题可能听起来很愚蠢,但我一直无法用谷歌来解决这个问题.

c++ g++

43
推荐指数
5
解决办法
2万
查看次数

解密C++模板错误消息

当他们说C++的错误消息在模板方面非常糟糕时,我真的开始明白人们的意思了.我已经看到了一些非常长的错误,就像一个与原型不匹配的函数一样简单.

有没有解决这些错误的技巧?

编辑:我正在使用gcc和MSVC.它们似乎都非常可怕.

c++ templates compiler-errors

27
推荐指数
3
解决办法
8499
查看次数

适配器模式:支持基本数据,可以是const或非const,优雅

如何使适配器类适当地支持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)

c++ const function adapter c++14

12
推荐指数
2
解决办法
730
查看次数

如何克服C++缺乏对嵌入式系统的工具支持?

问题不在于Linux内核.它也不是C与C++的争论.

我做了一项研究,在我看来,C++在嵌入式系统的异常处理和内存分配方面缺乏工具支持:

为什么linux内核没有在C++中实现? 除了公认的答案,请参阅Ben Collins的回答.

Linus Torvalds on C++:

"[...]任何为C++设计内核模块的人都是[...]
(b)无法看到他正在编写的C++偏见,实际上只是C"

" - 整个C++异常处理事情从根本上被打破了.对于内核来说尤其突破.
- 任何喜欢隐藏内存分配等内容的编译器或语言都不是内核的好选择."

联合攻击战斗机空中车辆C++编码标准:

"不得使用AV规则208 C++例外"


  1. 异常处理和内存分配是C++显然缺乏工具支持的唯一要点(在此上下文中)?

  2. 要解决异常处理问题,必须提供时间限制,直到抛出异常后才捕获异常?

  3. 你能解释一下为什么内存分配是个问题吗?如何克服这个问题,必须做些什么?

正如我所看到的,在这两种情况下,必须在编译时为发生的非​​常重要的事情提供上限,并在运行时依赖于事物.


回答:

  1. 不,动态演员也是一个问题,但它已经解决了.

  2. 基本上是的.处理异常所需的时间必须通过分析所有抛出路径来限制.

  3. 观看幻灯片"如何生活在没有新的"解决方案中的嵌入式系统编程.简而言之:预分配(全局对象,堆栈,池).

c++ real-time

9
推荐指数
2
解决办法
605
查看次数

更简单的c ++模板编译错误输出

在C++中使用模板时,任何错误都会导致编译器发出大量输出.在大多数情况下,当我处理某些信息时,大部分信息都是噪音,我必须滚动查找我感兴趣的信息,例如:

  • 列出每个候选模板.我很少使用这个长列表,它只会使输出混乱.
  • 扩展了模板特化的别名,例如std::string,写为std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >或扩展的typedef/alias声明.我更希望将它们展开以便于阅读.

是否有可能在g ++或clang中减少任何这种更短/更简单的输出?

显然,信息可能很重要,但是我宁愿再次编译更详细,默认情况下保持简短.

c++ compiler-errors g++ clang++

8
推荐指数
1
解决办法
118
查看次数

标签 统计

c++ ×5

compiler-errors ×2

g++ ×2

adapter ×1

c++14 ×1

clang++ ×1

const ×1

function ×1

real-time ×1

templates ×1