小编dub*_*nde的帖子

为什么不能在函数中声明模板?

阅读C++模板:完整指南,它说

请注意,模板不能在函数中声明

它不对书中的任何其他章节或外部资源给出解释和/或交叉引用.

有人可以帮忙解释一下.可能它会在本书后面解释,但还没有.如果先前解释过,我一定错过了它.

例:

int main()
{
  class DummyClass  //  This compiles ok
  {
    int object;
  };

  template <typename T> //  compile error "expected primary-expression before "template""
  class DummyTemplate
  {
    T object;
  };

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我也不明白gcc的错误信息.错误消息说:

expected primary-expression before "template"
Run Code Online (Sandbox Code Playgroud)

c++ templates

23
推荐指数
2
解决办法
7673
查看次数

使用longjmp/setjmp进行C错误处理有哪些"好"的方法?

我必须将C用于一个项目,我正在考虑使用longjmp/setjmp错误处理,因为我认为在一个中心位置处理错误要比返回代码容易得多.如果有一些关于如何做到这一点的线索,我将不胜感激.

如果发生任何此类错误,我特别关注正确完成资源清理.

另外,我如何处理导致多线程程序使用它们的错误?

更好的是,是否有一些C库已经存在以进行错误/异常处理?

c error-handling longjmp setjmp

20
推荐指数
4
解决办法
9926
查看次数

#pragma曾经在头部守卫中出现的原因是什么?

刚见过这里面 <boost/asio.hpp>

#ifndef BOOST_ASIO_HPP
#define BOOST_ASIO_HPP

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)

/// ....

#endif // BOOST_ASIO_HPP
Run Code Online (Sandbox Code Playgroud)

无视_MSC_VER预处理器检查,#pragma once在这种情况下有什么好处?在所有情况下以及在所有平台上,预处理器头部保护是否都不能确保头部内容只有included一次?

c++ boost pragma header-files c-preprocessor

18
推荐指数
1
解决办法
7187
查看次数

C/C++中的实现通信协议

我正在开始在软件中实现一些专有通信协议栈,但不知道从哪里开始.这是我以前没有做过的工作,我正在寻求最佳/推荐方法的资源方面的帮助.

我将使用c/c ++,我可以自由使用使用库(BSD/BOOST/Apache)但不使用GPL.我已广泛使用C++,因此使用C++的功能不是问题.

协议栈有三层,已经完全指定并正式验证.所以我需要做的就是在指定的语言中完全实现并测试它.还应该提到协议非常简单,但可以通过可靠的物理传输层在不同的设备上运行.我知道事件,输入,输出,副作用和协议状态机的行为.通常,接收中断以读取从物理层接收的消息以读取它并发送到等待设备.接收设备可以处理响应消息并将其传递给协议层,以在物理层上发送出去.

任何有关参考/建议的帮助将不胜感激.我愿意使用不同的语言,只是为了帮助我理解如何实现它们,但我最终还是要求助于选择的语言.

更新:我希望实现的示例协议类似于SNEP.

我不需要担心连接管理.我们可以假设连接已经建立,协议确实是数据交换,其中协议消息已在规范中明确定义

c c++ communication-protocol

14
推荐指数
3
解决办法
2万
查看次数

学习嵌入式C/C++开发的最佳评估套件是什么?

我正在尝试改进我在ARM体系结构上的嵌入式C/C++开发.我最近从68K开发转向ARM,并希望利用我的业余时间深入挖掘平台并学习最佳实践,特别是在开发移动平台方面.

优选地,32位架构将有助于支持开发工具.学习过程中的一些乐趣可以增强我对平台的理解

c c++ embedded arm

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

我如何开始使用boost

我在这里听到很多关于提升的内容,我开始认为它对我的软件开发有很大的帮助.在我的特定情况下,并发和内存管理更是如此,因为我们在这方面遇到了很多错误.

我需要进行哪些关键语言功能才能有效地从使用提升和缩短学习曲线中获益?我已经看到函数对象是常用的,所以我可能需要对此进行改进.

另外,是否有任何教程和101个资源我可以快速查看,以获得使用boost的感觉和理解.

我意识到有很多提升优惠,我必须为正确的工作选择合适的工具,但任何线索都会有所帮助.

有关

c++ boost

11
推荐指数
2
解决办法
4320
查看次数

简单的C实现跟踪内存malloc/free?

编程语言:C平台:ARM编译器:ADS 1.2

我需要跟踪melloc/free项目中的简单调用.我只需要了解程序分配了所有资源后需要多少堆内存的基本概念.因此,我为malloc/free调用提供了一个包装器.在这些包装器中,我需要在malloc调用时递增当前内存计数,并在free调用时递减它.这个malloc案例很简单,因为我有来自调用者的大小.我想知道如何处理这种free情况,因为我需要在某处存储指针/大小映射.这是C,我没有标准的地图来轻松实现这一点.

我试图避免在任何库中链接,所以更喜欢*.c/h实现.

所以我想知道是否已经有一个简单的实现可能会引导我.如果没有,这是继续实施的动机.

编辑:纯粹用于调试,此代码不随产品提供.

编辑:根据Makis的回答进行初步实施.我很感激对此的反馈.

编辑:重新实施

#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <limits.h>

static size_t gnCurrentMemory = 0;
static size_t gnPeakMemory    = 0;

void *MemAlloc (size_t nSize)
{
  void *pMem = malloc(sizeof(size_t) + nSize);

  if (pMem)
  {
    size_t *pSize = (size_t *)pMem;

    memcpy(pSize, &nSize, sizeof(nSize));

    gnCurrentMemory += nSize;

    if (gnCurrentMemory > gnPeakMemory)
    {
      gnPeakMemory = gnCurrentMemory;
    }

    printf("PMemAlloc (%#X) - Size (%d), Current …
Run Code Online (Sandbox Code Playgroud)

c dynamic-memory-allocation

11
推荐指数
1
解决办法
1万
查看次数

如何在Emacs中使用astyle?

我使用的Windows emacs规格如下.

2009-02-26的GNU Emacs 23.0.91.1(i386-mingw-nt5.1.2600)

我希望能够运行astyle,以便可以使用键盘命令或菜单重新格式化代码.在emacs中有什么其他的等价物?

emacs

9
推荐指数
1
解决办法
3162
查看次数

如何在doxygen中删除生成输出中的行引用?

我想删除行看如下,但我仍然想要返回源代码浏览

Definition at line 377 of file xxx.h. 
Run Code Online (Sandbox Code Playgroud)

我在doxygen配置文件中尝试了以下两个,但这些只删除了类型的交叉引用

# If the REFERENCES_RELATION tag is set to YES 
# then for each documented function all documented entities 
# called/used by that function will be listed.

REFERENCES_RELATION    = NO

# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
# link to the source code.  Otherwise they will link to …
Run Code Online (Sandbox Code Playgroud)

doxygen

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

如何将bitset转换为bytes/uint8数组?

我需要从bitset中取出字节,这可能(不)包含多个CHAR_BIT位.我现在需要将多少位中的位放入数组中.例如,

位集声明为 std::bitset < 40> id;

有一个单独的变量可以使用nBits多少位id.现在我想以CHAR_BIT的倍数提取这些位.我还需要处理案件nBits % CHAR_BIT != 0.我可以将它放入uint8数组中

c++ arrays bitset

8
推荐指数
2
解决办法
7123
查看次数