小编Nat*_*man的帖子

如何在C++中为枚举指定无符号整数?

在我正在重写的内部的C++库中,我有一些无符号整数变量,我想将其转换为枚举:

enum InitType {
    INIT,
    NON_INIT
};
Run Code Online (Sandbox Code Playgroud)

我有一个这种类型的变量:

InitType InitVar;
Run Code Online (Sandbox Code Playgroud)

该库是从其变量为普通整数的代码的另一部分调用的:

uint32_t UnsignedIntVar;
Run Code Online (Sandbox Code Playgroud)

我想将从调用者传递的无符号版本分配给库内部枚举:

InitVar = UnsignedIntVar;
Run Code Online (Sandbox Code Playgroud)

但编译器不喜欢这样:

error: invalid conversion from 'uint32_t' to 'InitType'
Run Code Online (Sandbox Code Playgroud)

执行此转换的最简洁方法是什么?


以下是我的一些想法:

如果enum只有两个值,我可以这样做:

    InitVar = UnsignedIntVar ? Init : NonInit;
Run Code Online (Sandbox Code Playgroud)

这是我想做这样一个任务的时候写的很多东西.

如果它有更多值,我可以创建一个转换表:

InitType Uint2InitTypeConv = {INIT_0, INIT_1, INIT_2...};
Run Code Online (Sandbox Code Playgroud)

哪里INIT_x只是枚举的名称.然后我可以使用表格进行翻译:

InitVar = Uint2InitTypeConv[UnsignedIntVar];
Run Code Online (Sandbox Code Playgroud)

这看起来很干净.但是,我认为我应该可以为此重载operator=,但我似乎无法做到这一点.这很容易包含我能提出的任何其他丑陋.

c++ enums type-conversion

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

如何在Linux中以C语言获取当前进程的处理器ID?

我正在编写一个程序,需要知道它运行的逻辑处理器.

这个问题告诉我如何在汇编中执行此操作,而这个问题告诉我如何在汇编中使用此代码而不将其转换为AT&T语法.

使用现有的Linux系统调用或库函数有没有更简单的方法来实现这一点,还是我需要重新发明轮子?

c linux

4
推荐指数
2
解决办法
8767
查看次数

括号如何改变正则表达式匹配的结果?

任何人都可以解释为以下两种语法之间的区别:

($x) = $a =~ /(\d+)/;

$y = $a =~ /(\d+)/;
Run Code Online (Sandbox Code Playgroud)

在示例中,if $a= 100lkjthen $x = 100but $y = 1.

使用此代码,我试图提取$a字符串中的数值.

我不明白为什么?

regex perl

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

除了Valgrind之外的任何工具来监视Linux中运行进程的内存使用情况?

这个答案这个问题说有没有办法Valgrind的附加到一个已经运行的进程.
是否有任何其他Linux工具可以报告内存使用情况,但可以附加到已经运行的进程?

linux memory-management

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

在Python中定义一个引用self而不称为"self"的类方法是否有用?

我正在自学Python,我在Dive into Python 第5.3节中看到以下内容:

按照惯例,调用任何Python类方法的第一个参数(对当前实例的引用)self.这个参数填充了thisC++或Java中保留字的作用,但self它不是Python中的保留字,仅仅是命名约定.尽管如此,请不要称之为self; 这是一个非常强大的惯例.

考虑到self不是一个Python关键字,我猜,这有时会使用别的有用的.有这种情况吗?如果没有,为什么它不是关键字?

python naming-conventions

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

无法在Linux中的python命令行中编辑行

我在Linux下运行Python CLI:

bla:visualization> python
Python 2.1.1 (#18, Nov  1 2001, 11:15:13) 
[GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
Type "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)

由于某种原因,箭头键和删除键不起作用:

删除:

>>> x^H^H^H
Run Code Online (Sandbox Code Playgroud)

向上箭头:

>>> x^[[A^[[A
Run Code Online (Sandbox Code Playgroud)

等等...

我怎样才能做这些工作?

python linux command-line

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

x86程序集中是否有任何仅在64位模式下存在的指令?

某些旧的x86指令在64位模式下未定义.例如LDS,LES和()和()指令的LSS短操作码.INC r1640 + rwINC r3240 + rd

是否有任何仅在64位模式下定义的指令,而不是在32位保护模式下?

编辑: 上下文是x86处理器的开发.我想确保我与规范兼容.

x86 assembly x86-64 protected-mode

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

如何用一个语句读取Perl中的目录?

我正在编写一个脚本来查找目录中的某些文件并对其进行处理.我继续写下面的内容:

opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
Run Code Online (Sandbox Code Playgroud)

虽然我可以(实际上应该)将它包装在一个函数中,但我想知道是否有更优雅的方法来做到这一点?

directory perl

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

C结构不定义类型?

我刚开始用专业的Java背景和一些(如果没有太多)C++知识学习C,我很惊讶这在C中不起作用:

struct Point {
    int x;
    int y;
};

Point p;

p.x = 0;
p.y = 0;
Run Code Online (Sandbox Code Playgroud)

似乎我必须声明p使用struct Point作为类型或使用typedef.这段代码在C99中有效吗?或者这是一个"C++的东西"?

c

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

gcov在当前目录中创建.gcov文件.有没有办法改变这个?

我在RHEL上运行gcov/gcc 4.1.2.

当我想为gcov文件指定目录时.关于如何做到这一点的任何想法?

c++ gcc gcov

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