小编use*_*653的帖子

迭代C++可变参数模板

我有以下内容:

template<typename FIRST, typename SECOND>
Sender *createSenderChain() {
    return new FIRST(new SECOND());
}
Run Code Online (Sandbox Code Playgroud)

是否可以使模板可变:

template<typename FIRST, typename ...Args>
Sender *createSenderChain() {
    return new FIRST(new SECOND(new THIRD(new ...))  <-- This is the pattern I want, 
                                                         but how should it be done 
                                                         using the args list?
}
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic

10
推荐指数
2
解决办法
3319
查看次数

在串行通信中使用什么类型的框架

在串行通信链路中,首选的成帧/同步方法是什么?

  • 使用SOF构建帧和转发序列,就像在HDLC中一样?
  • 依赖于使用带有长度信息和CRC的标头?

它是一个嵌入式系统,使用从UART到内存的DMA数据传输.我认为使用SOF的框架方法最具吸引力,但也许另一个方法足够好?

有没有人对这两种方法有利有弊?

serial-communication uart

6
推荐指数
1
解决办法
2732
查看次数

访问STM32 dma目标位置

我想知道从dma写入数据的内存中读取是否安全?

我有一个带有adc设置的stm32F1,可以连续执行转换并使用dma将数据传输到ram缓冲区.我知道我可以使用adc中断安全地访问缓冲区,但是如何从非中断上下文访问缓冲区呢?如果我尝试从dma写的相同位置读取数据,数据是否会被破坏?

stm32 dma

4
推荐指数
1
解决办法
1196
查看次数

是否可以从函数返回 std::initializer_list ?

以下作品:

struct A {
    int i;
    int v;
};

std::initializer_list<A> getList() {
    return {A{0,1}, A{2,3}};
}

int main() {
    auto list = getList();
}
Run Code Online (Sandbox Code Playgroud)

我可以验证列表的内容是否正确。

但是,如果我将成员更改v为 a std::vector,则它不起作用:

struct A {
    int i;
    std::vector<int> v;
};

std::initializer_list<A> getList() {
    return {A{0,{1,2}}, A{3,{4,5}}};
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,返回的列表包含垃圾值。

我知道标准说复制 a 时不会复制底层对象std::initializer_list。这是这里发生的事情吗?

为什么它在第一个示例中有效?是运气吗?当列表中的对象包含 a 时,情况有什么特别吗std::vector

c++ return-value c++11 stdinitializerlist

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