小编Luk*_*sen的帖子

如何在CMake中跨多行拆分字符串?

我通常在我的项目中有一个策略,永远不会在超过80行的文本文件中创建行,因此它们可以在各种编辑器中轻松编辑(你知道这笔交易).但是使用CMake我遇到的问题是我不知道如何将一个简单的字符串拆分成多行来避免一条巨大的线.考虑这个基本代码:

set(MYPROJ_VERSION_MAJOR "1")
set(MYPROJ_VERSION_MINOR "0")
set(MYPROJ_VERSION_PATCH "0")
set(MYPROJ_VERSION_EXTRA "rc1")
set(MYPROJ_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")
Run Code Online (Sandbox Code Playgroud)

它已经超过了80行限制.那么如何将CMake中的一行分成多行而不会变得冗长(多个list(APPEND ...)等)?

cmake

85
推荐指数
7
解决办法
4万
查看次数

在C++ 11中是否需要u8字符串文字

来自维基百科:

为了在C++编译器中增强对Unicode的支持,char类型的定义已被修改为至少为存储UTF-8的8位编码所需的大小.

我想知道这对于编写便携式应用程序究竟意味着什么.写这个有什么区别吗?

const char[] str = "Test String";
Run Code Online (Sandbox Code Playgroud)

或这个?

const char[] str = u8"Test String";
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不在代码中的每个字符串文字中使用后者?

当TestString中有非ASCII字符时会发生什么?

c++ utf-8 literals string-literals c++11

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

Mypy 子类中更具体的参数

我想声明一个带有抽象方法的基类,该方法具有类型化参数,以便实现类可以为该参数指定更具体的类型,例如:

from abc import ABC, abstractmethod

class Job(ABC):
    pass

class EasyJob(Job):
    pass

class HardJob(Job):
    pass

class Worker(ABC):
    @abstractmethod
    def run(self, job: Job) -> None:
        raise NotImplementedError()

class EasyWorker(Worker):
    def run(self, job: EasyJob) -> None:
        pass

class HardWorker(Worker):
    def run(self, job: HardJob) -> None:
        pass
Run Code Online (Sandbox Code Playgroud)

然而,mypy 对此抱怨是可以理解的:

line 14: error: Argument 1 of "run" is incompatible with supertype "Worker"; supertype defines the argument type as "Job"
line 18: error: Argument 1 of "run" is incompatible with supertype "Worker"; supertype defines the …
Run Code Online (Sandbox Code Playgroud)

python type-hinting mypy python-typing

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

使用MinGW链接到Python

我不想创建一个嵌入python解释器的跨平台程序,并用MinGW编译它.但是Python Binary发行版没有提供MinGW链接的库(仅python32.lib适用于Visual C++),并且Python Source包不支持使用MinGW进行编译.

我尝试python32.lib在Mingw中链接,-lpython32但它仍会产生如下错误:

main.cpp: undefined reference to `_imp__Py_Initialize'
main.cpp: undefined reference to `_imp__Py_Finalize'
Run Code Online (Sandbox Code Playgroud)

如何在MinGW中链接Python?我真的不想切换到使用Visual C++.

python mingw

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

Pascal/Delphi for C++教程 - 编码器

我是C++ - 程序员.但现在我必须学习Pascal/Pascal.是否有任何网站,周围的文件可以教我知道差异的人?

delphi pascal

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

迭代std :: deque时出现奇怪的运行时错误

考虑以下代码:

 1  typedef std::deque<int> mydeque_t;
 2  mydeque_t mydeque;
 3   
 4  mydeque_t::iterator start = mydeque.begin();
 5  
 6  for (int i = 0; i != 1000; ++i)
 7       mydeque.push_back(i);
 8  
 9  for (mydeque_t::iterator myint = start; myint != mydeque.end(); ++myint)
10     *myint += 1;
Run Code Online (Sandbox Code Playgroud)

在执行它时,我总是在第10行遇到运行时错误(实例:http://ideone.com/juQAA).但是,当我更改第6行for (int i = 0; i != 100; ++i)代码工作正常.

通过start在第一个for循环后面移动定义(第4行)可以很容易地修复代码,但在我的例子中,我需要它保持在它之前.然而,即使这样,我认为它应该运行良好,任何人都可以解释为什么它没有?

c++ iterator stl runtime-error

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

只有在构建自定义目标时才在CMake中安装

我正在尝试设置CMake以自动生成我的Doxygen文档.我目前使用以下代码.

find_package(Doxygen)
if (DOXYGEN_FOUND)
    configure_file("docs/Doxyfile.in" "${PROJECT_BINARY_DIR}/Doxyfile")
    add_custom_target(docs
                      COMMAND ${DOXYGEN_EXECUTABLE}
                              "${PROJECT_BINARY_DIR}/Doxyfile"
                      SOURCES "${PROJECT_BINARY_DIR}/Doxyfile")
    install(DIRECTORY "${PROJECT_BINARY_DIR}/docs/"
            DESTINATION "docs")
endif()
Run Code Online (Sandbox Code Playgroud)

它在你输入时工作正常make docs生成文档PROJECT_BINARY_DIR/docs.当您输入make install它时,将docs子目录复制到CMAKE_INSTALL_PREFIX.但是,当用户不希望生成文档时,只需键入make install以下错误:

CMake Error at cmake_install.cmake:36 (FILE):
  file INSTALL cannot find "/home/lukas/workspace/TheGame/build/docs".
Run Code Online (Sandbox Code Playgroud)

install如果docs构建自定义target()(或者子目录docs存在于其中PROJECT_BINARY_DIR),如何指示仅执行命令?

cmake

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

什么被认为是更好的风格?一个大循环还是多个小循环?

我目前正在使用一个大容器,我需要迭代它来做很多事情。以下哪个被认为是更好的风格?

a) 大循环:

for (container::iterator it = myContainer.begin(); it < myContainer.end(); ++it) {
    // do thing a with *it

    // do thing d with *it

    // do thing c with *it

    // do thing b with *it
}
Run Code Online (Sandbox Code Playgroud)

b) 小循环:

for (container::iterator it = myContainer.begin(); it < myContainer.end(); ++it) {
    // do thing a with *it
}

for (container::iterator it = myContainer.begin(); it < myContainer.end(); ++it) {
    // do thing b with *it
}

for (container::iterator it = myContainer.begin(); it …
Run Code Online (Sandbox Code Playgroud)

coding-style

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

Py_Finalize()在Python中出错后崩溃

我正在尝试使用Py_CompileString()和调用一些python代码PyEval_EvalCode().它工作正常,但当Python代码包含错误Py_Finalize()时.

Py_Initialize();

PyObject* code = Py_CompileString("pprint('Hello World')", "", Py_file_input);
PyObject* m = PyImport_AddModule("__main__");
PyObject* d = PyModule_GetDict(m);
Py_DECREF(m);
PyObject* r = PyEval_EvalCode(code, d, d);
Py_DECREF(d);
if (!r)
    PyErr_Print();
Py_DECREF(code);

Py_Finalize();
Run Code Online (Sandbox Code Playgroud)

输出符合预期:

Traceback (most recent call last):
  File "", line 1, in <module>
NameError: name 'pprint' is no defined
Run Code Online (Sandbox Code Playgroud)

但是在调用Py_Finalize()程序崩溃的时候.如果我将第3行更改为

PyObject* code = Py_CompileString("print('Hello World')", "", Py_file_input);
Run Code Online (Sandbox Code Playgroud)

程序运行并终止正常.这里出了什么问题?

如果我在gdb中运行该程序,我得到这个输出:

Windows:
Program received signal SIGSEGV, Segmentation fault.
0x1e01a030 in python32!PyType_IsSubtype () from C:\Windows\SysWOW64\python32.dll

Linux: …
Run Code Online (Sandbox Code Playgroud)

c python

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