小编jia*_*zhe的帖子

如何命名我的新项目的命名空间?

我将创建一个新的库,将基因组注释呈现为图表.但是,由于C++没有像Perl这样的集中式库网站,我如何知道命名空间是否与现有命名空间冲突?

c++ namespaces

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

node.js 需要返回一个字符串而不是模块对象

我正在尝试制作一个电子应用程序。然而,我的工作一开始就停滞不前:require关键字给了我一个字符串,而不是模块对象。

electron = require('electron')
console.log(electron)
Run Code Online (Sandbox Code Playgroud)

它打印:

/path/to/my/project/node_modules/_electron@1.6.11@electron/dist/electron
Run Code Online (Sandbox Code Playgroud)

,完全不能作为模块使用。

相比之下,如果我导入一个内置模块或另一个 npm 安装的模块:

fs = require('fs')
console.log(fs)

mkdirp = require('mkdirp')
console.log(mkdirp)
Run Code Online (Sandbox Code Playgroud)

它打印对象层次结构,包括变量和函数。

以下是选举目录的内容,不知道是否健康:

$ ls node_modules/electron
appveyor.yml  cli.js  CONTRIBUTING.md  dist  electron.d.ts  index.js  install.js  issue_template.md  LICENSE  node_modules  package.json  path.txt  README.md  test
Run Code Online (Sandbox Code Playgroud)

node.js electron

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

如何自动将简单标志的值存储到变量中?

boost选项解析器允许指定一个变量来存储选项值,而不是使用以下so_long["typing"].as<bool>()方式:

bool flag_value;
entries.add_options()
("flag", value<bool>(&flag_value), "a simple flag value");
......
cout<<"flag value is: "<<flag_value<<endl;
Run Code Online (Sandbox Code Playgroud)

但是,上述选项声明不会创建简单的标志选项.它实际上要求你输入一些东西作为值(--flag true | false | on | off | yes | no | 1 | 0),这不是我想要的.

那么,有没有办法将结果存储在一个布尔值中,并仍然将选项保持为一个简单的标志?

boost-program-options

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

使用带有 boost 的 cmake 时得到“/usr/lib64/lib64”

我有一个使用 FindBoost.cmake 来定位 boost 的 cmake 控制包。我的两个用户向我报告了这个错误,但我无法在我的计算机上重现它。

在解决目标可执行文件的依赖关系时,make 声明以下错误:

make[2]: *** No rule to make target `/usr/lib64/lib64/libboost_filesystem-mt.so.5', needed by `src/ht-asm'.  Stop.
Run Code Online (Sandbox Code Playgroud)

在添加目标“ht-asm”之前,我已经在我的 makefile 中设置了库目录:

link_directories(
    ${Boost_LIBRARY_DIRS}
)
Run Code Online (Sandbox Code Playgroud)

我完全不知道这个问题,因为我从来没有在我的电脑上遇到过它们(一台使用 Debian 6,另一台使用 Fedora 18)。

boost cmake

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

这些128位SIMD异或运算有什么区别

Intel 提供了几个 SIMD 命令,它们似乎都对 128 位数据执行按位异或:

_mm_xor_pd(__m128d, __m128d)
_mm_xor_ps(__m128, __m128)
_mm_xor_si128(__m128i, __m128i)
Run Code Online (Sandbox Code Playgroud)

按位操作不是只对位流进行操作吗?为什么有三个操作类型不同但数据大小相同?

simd sse2

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

类型对齐是否会修改类型大小?

我写了以下代码并在gcc上测试了它:

// firstly some platform-specific workarounds
#if _MSC_VER
#define ALN_BEGIN(x) __declspec(align(x)) 
#define ALN_END(x)
#define alignof(x) __alignof(x)
#else
#define ALN_BEGIN(x)
#define ALN_END(x) __attribute__((aligned(x)))
#define alignof(x) __alignof__(x)
#endif

// struct have three 4-byte members, but aligned at 32 byte
ALN_BEGIN(32) struct Foo
{
    float a;
    float b;
    float c;
} ALN_END(32);

// show its size and alignment
int main(int argc, char** argv)
{
    printf("size %d, alignment%d\n", sizeof(Foo), alignof(Foo));
}
Run Code Online (Sandbox Code Playgroud)

当我使用gcc编译并运行时,虽然Foo只为其所有成员提供了12个字节,但是sizeof(Foo)得到32这是对齐大小.尺寸扩展是根据语言标准(可靠)还是仅作为GCC的功能?

我正在创建一个对象池类,所以我必须精确地处理类型大小和对齐.

c++

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

当对原始类型变量执行"="时,CPython实际上做了什么?

例如:

a = some_process_that_generates_integer_result()
b = a
Run Code Online (Sandbox Code Playgroud)

有人告诉我,ba将指向同一块整数对象,因此b将修改该对象的引用计数.代码PyObject* ast2obj_expr(void* _o)Python-ast.c中执行:

static PyObject* ast2obj_object(void *o)
{
    if (!o)
        o = Py_None;
    Py_INCREF((PyObject*)o);
    return (PyObject*)o;
}

......

case Num_kind:
    result = PyType_GenericNew(Num_type, NULL, NULL);
    if (!result) goto failed;
    value = ast2obj_object(o->v.Num.n);
    if (!value) goto failed;
    if (PyObject_SetAttrString(result, "n", value) == -1)
            goto failed;
    Py_DECREF(value);
    break;
Run Code Online (Sandbox Code Playgroud)

但是,我认为修改引用计数而不更改所有权实际上是徒劳的.我期望的是每个包含原始值(浮点数,整数等)的变量总是有自己的值,而不是引用同一个对象.

在执行我的简单测试代码时,我发现上面的Num_kind分支中的断点永远不会到达:

def some_function(x, y):
    return (x+y)*?x-y)

a = some_function(666666,66666)
print a

b = a …
Run Code Online (Sandbox Code Playgroud)

python cpython reference-counting

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

如何让一些文件在QtCreator中可见

我正在使用cmake来配置我的项目.似乎QtCreator只显示那些引用的文件add_executable,add_libraryconfigure_file.项目目录中的其他文件在" 项目"面板中不可见.

虽然我们仍然可以通过file-> open访问这些文件,但是让我感觉很糟糕,许多重要的源文件在" 项目"面板中是不可见的.所以...

  • QtCreator如何决定是否显示文件?
  • 是否有任何cmake命令可以使任意文件在QtCreator中可见?

=======================

一些额外的信息:

我的项目是一个带有PerlXS接口的C++库.XS代码由xsubpp预处理为C代码,此操作通过add_custom_target添加到cmake项目中.但是,QtCreator不会将XS文件添加到Porjects面板中.此外,项目可以包含非源文本文件,如README,Changes等.

cmake qt-creator

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

将派生对象存储到void*是不安全的,然后将基础对象转换出来吗?

例如:

class Base1 {};
class Base2 {};
class Derived: publid Base1, public Base2 {};

// object is stored on a void* slot
void* void_slot = new Derived();

// ... many decades after ...

//object is fetched from the void* slot
Base2* obj = (Base2*) void_slot;
obj->some_base2_method();
Run Code Online (Sandbox Code Playgroud)

我认为这可能不安全.不dynamic_cast<>解决这个问题?

Base2* obj = dynamic_cast<Base2*> void_slot;
Run Code Online (Sandbox Code Playgroud)

更多背景:

我正在从Perl调用C++库.构造C++对象时,它存储在Perl值的整数槽中(a的IVSV),就像a void*; 当您调用方法时,将从中转换对象指针IV,并使用对象指针调用相应的C++方法.因此我猜它可能有问题,因为指向基类型的指针可能与指向派生类型的指针不同,尤其是当存在多个继承时.

我在PerlMonks上发布了一个类似的问题,但没有得到太多响应.所以我在这里问一下,从C++的角度来看.

c++ inheritance

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

FFMPEG:如何将h264流包装到FLV容器中?

我想要的很简单:将H.264视频流包装到FLV容器中。但是,ffmpeg只是解码输入流并将原始视频流打包到FLV中。详细信息如下:

输入流是从硬件编码器摄像机捕获的,FLV将被发送到某些视频服务器。首先,我使用以下命令:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -f flv "rtmp://some.website.com/receive/path"
Run Code Online (Sandbox Code Playgroud)

但是,结果流是可疑的。看方没有收到任何H.264内容。然后,我通过将输出写入本地文件进行了测试。

1:读取原始流,通过h264_omx编码,写入FLV文件:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video0 -codec h264_omx -f flv raw_input_h264_omx.flv

......
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 194017.870905, bitrate: 18432 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 320x240, 18432 kb/s, 15 fps, 15 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_omx))
......
Run Code Online (Sandbox Code Playgroud)

2:读取H264流,写入FLV文件:

$ ffmpeg -framerate 15 -s …
Run Code Online (Sandbox Code Playgroud)

flv ffmpeg h.264

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