小编Mac*_*ski的帖子

C++14 中 lambda 的 std::result_of 的限制

我有一段 C++17 代码,我想将其移植到 C++14(项目的限制)。该代码根据提供者返回的 lambda 在堆上分配一个函子。

decltype(auto) fun_provider(std::string msg)                                                                                                                                                                                                                                      
{
    return [msg](){ std::cout << msg << std::endl; };
}

int main()
{
    auto fun = std::make_unique<
                    std::invoke_result_t<decltype(fun_provider), std::string>
                   >(fun_provider("Provided functor"));
    (*fun.get())()
}
// output: "Provided functor"
Run Code Online (Sandbox Code Playgroud)

关键是,它避免了将 lambda 类型硬编码为std::function<void()>. 据我所知,闭包类型未指定,这种构造意味着闭包对象的不必要的副本(希望这是正确的)。

我想用 C++14 实现同样的目标,可能吗?std::result_of我用and/or尝试了一些构造,decltype但到目前为止还没有成功。

c++ c++14

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

Allwinner a64 - 通过热复位从 aarch32 切换到 aarch64

我想在 Pine64 板上部署一个简单的裸机软件,托管全志 A64 SoC。配置如下:开机时boot0启动u-boot,将my加载hello.bin到RAM( 0x40000000)并开始执行。问题是它处于 aarch32 执行状态,我想要 aarch64。

我已经找到了一种方法来做到这一点,就像在这个补丁中一样维基上也有一些背景。

我已复制代码并objdump -d hello.o返回与链接中相同的结果:

.text 节的反汇编:

00000000 <_reset>:
   0:   e59f0024        ldr     r0, [pc, #36]   ; 2c <_reset+0x2c>
   4:   e59f1024        ldr     r1, [pc, #36]   ; 30 <_reset+0x30>
   8:   e5801000        str     r1, [r0]
   c:   f57ff04f        dsb     sy
  10:   f57ff06f        isb     sy
  14:   ee1c0f50        mrc     15, 0, r0, cr12, cr0, {2}
  18:   e3800003        orr     r0, r0, #3
  1c:   ee0c0f50        mcr     15, 0, r0, …
Run Code Online (Sandbox Code Playgroud)

bare-metal u-boot arm64

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

标签 统计

arm64 ×1

bare-metal ×1

c++ ×1

c++14 ×1

u-boot ×1