小编Pla*_*ove的帖子

使用需要函数指针的C库时的C++习惯用法?

我在C++应用程序中使用C库.C SDK具有将回调函数指针作为参数的函数.这些功能的签名通常如下:

typedef int (* Func) (type1 c, type2 d);
Run Code Online (Sandbox Code Playgroud)

我的代码是用C++中的类构建的.但是,我不能将任何成员函数作为回调传递给此函数,因为它不接受int (MyClass::*)(type1 c, type2 d)并且只接受int (*)(type1 c, type2 d).

我通过static在各个类中定义所有回调,然后将它们传递给C库然后工作来解决这个问题.

我还是C++的新手,所以我不确定这是否是正确的解决方案?代码有效,但我很想知道我做错了.

c++

3
推荐指数
1
解决办法
109
查看次数

使用 unique_ptr 作为我自己的移动构造函数的替代方法是一种好习惯吗?

我正在使用 C++ 制作纸牌游戏。它类似于纸牌,即有不同的堆栈和堆,卡片从一个移动到另一个。

std::vector用于各种桩,但不是std::vector<Card>,我使用std::vector<std::unique_ptr<Card>>. 我这样做的理由是:

  1. 它确保所有权责任与vector它当前所处的位置有关。
  2. 它确保我在堆叠和堆叠之间转移时不会意外地拥有超过 1 张同一张卡的副本,即强制我使用std::move.
  3. 我不必为Card.

这是一种合理的使用方式unique_ptr吗?

编辑:忘了提,有Card从基类派生的不同类型的s。我是一个初学者,不想在所有级别上使用不同的复制和移动构造函数。

c++

3
推荐指数
1
解决办法
122
查看次数

裸机 RISC-V CPU - 处理器如何知道从哪个地址开始获取指令?

我正在设计自己的 RISC-V CPU,并且已经能够实现一些指令代码。

我已经安装了 RV32I 版本的 GCC 编译器,因此现在可以使用汇编器riscv32-unknown-elf-as了。

我正在尝试仅用一条指令来汇编一个程序:

# simple.asm
add x5,x6,x7
Run Code Online (Sandbox Code Playgroud)

我使用汇编器编译它,然后使用以下命令运行 objdump:

# simple.asm
add x5,x6,x7
Run Code Online (Sandbox Code Playgroud)

这会打印出以下内容:

new:     file format elf32-littleriscv


Disassembly of section .text:

00000000 <.text>:
   0:   007302b3                add     t0,t1,t2

Disassembly of section .riscv.attributes:

00000000 <.riscv.attributes>:
   0:   2d41                    jal     0x690
   2:   0000                    unimp
   4:   7200                    flw     fs0,32(a2)
   6:   7369                    lui     t1,0xffffa
   8:   01007663                bgeu    zero,a6,0x14
   c:   00000023                sb      zero,0(zero) # 0x0
  10:   7205                    lui     tp,0xfffe1
  12:   3376                    fld     ft6,376(sp)
  14:   6932                    flw     fs2,12(sp)
  16: …
Run Code Online (Sandbox Code Playgroud)

assembly cpu-architecture elf riscv riscv32

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

定义变量时出现意外缩进

我是Python新手,它只会让我感到困惑.在下面的图像中,为什么第一个工作,第二个工作给我一个缩进错误?

作品:

这有效

不起作用:(注意在Notepad ++中弹出的额外树扩展器)

在此输入图像描述

错误:

  File ".\sigma.py", line 14
    for val in vs:
    ^
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)

我正在使用Notepad ++,并且在任何地方都没有空格/制表符问题.另外,在Python控制台上试用它,在第二张图像中以完全相同的方式输入它.它工作正常.我猜这里有一个非常合乎逻辑的解释,但是来自强大的背景(在Java中> 5年),这感觉就像是一个不必要的错误.

python indentation python-2.7

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

如何在Scala中实现像Int*,String*这样的变种?

可能重复:
Scala中可变长度参数列表的类型是什么?

我最近在参数列表上发现了这篇文章:https://stackoverflow.com/a/4684598/1287554,我发现它真的很有趣.

我也理解下面给出的用例:

def fn(x:Int*) = x.sum                    //> fn: (x: Int*)Int  
fn(1,2,3)                                 //> res0: Int = 6
Run Code Online (Sandbox Code Playgroud)

我看到的显而易见的解释是,它是以下代码的某种语法糖:

def fn(x:List[Int]) = x.sum               //> fn: (x: List[Int])Int
fn(List(1,2,3))                           //> res0: Int = 6
Run Code Online (Sandbox Code Playgroud)

但是我找不到任何关于它们的文档.有人能指出一些链接来解释这种类型的功能参数吗?此外,他们被称为参数列表或其他什么?也许我找不到任何东西的原因是因为我用错误的名字搜索?

scala

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

指向unique_ptr的指针 - 这是一个漏洞吗?

这似乎是一种避免unique_ptr使用指向unique_ptr对象的指针的简单方法.这并不困难.所以使用unique_ptr是一种绅士的协议,而不是真正超强的?

#include <iostream>
#include <memory>
using namespace std;

class Box {
  public:
    int num;
};

void update_box(unique_ptr<Box>* pu);

int main(){
  unique_ptr<Box> b{new Box};
  unique_ptr<Box>* u = &b;
  update_box(u);
  cout << b->num << endl; // Outputs 99.
  return 0;
}

void update_box(unique_ptr<Box>* pu) {
  (*pu)->num = 99;
}
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr

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

具有虚拟功能的C ++多级继承

我对C ++中的多级继承和虚函数有些困惑。在下面的示例中,我具有3个Bottom继承级别,分别是从Middle继承自Top

如果我在Topas中声明该函数virtual并使用type指针Middle,则Middle即使未声明该函数,它仍然会覆盖声明的函数virtual

我期待:

Middle* ptr = new Bottom();
ptr->hello(); // Expectation: "Hello Middle"  (Actual: "Hello Bottom")
Run Code Online (Sandbox Code Playgroud)

Top* ptr = new Bottom();
ptr->hello(); // "Hello Bottom"
Run Code Online (Sandbox Code Playgroud)

但这似乎并非如此。为什么是这样?

完整代码:

#include <iostream>

//  Top
//   ^
// Middle
//   ^
// Bottom

struct Top {
  // This is set to virtual.
  virtual void hello() { std::cout << "Hello Top\n"; }
};

struct Middle : public …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

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