小编Eri*_*und的帖子

C++代码可以在C++ 03和C++ 11中有效但是做不同的事情吗?

C++代码是否可以符合C++ 03标准和C++ 11标准,但根据编译的标准,可以做不同的事情吗?

c++ language-lawyer c++11 c++03

294
推荐指数
7
解决办法
2万
查看次数

如何使用该工具包括你和CMake一起使用什么来检测未使用的标头?

该工具include-what-you-use可用于检测不需要的标头.我正在使用CMake来完成我的C++软件项目.如何指示CMake在我的软件项目的源文件上自动运行包含什么?

c++ cmake header-files

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

如何检测源代码中使用的C++ 11功能

让我们说我已经编写了这个C++程序(基本上什么都不做)

#include <cstdlib>

int main(int argc, char *argv[]) {
  enum class Color { Red, Orange, Yellow, Green, Blue, Violet };
  constexpr float a = 3.1415f;
  auto b = a;
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检测我的程序中使用的C++ 11功能?是否有其他程序可以从我的源代码中提取这些信息?这样的程序可以输出一系列功能:

$ cat main.cc | some-clever-software
N2347
N1984
N2235
Run Code Online (Sandbox Code Playgroud)

(或者它可以输出URL:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf)

如果我有这样的列表,那么编写一个使用CMake命令target_compile_features()的CMakeLists.txt会更容易,比如这个

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
add_executable(foobar main.cc)                                                                                                                                                                                                                                                     
set(needed_features
    cxx_strong_enums
    cxx_constexpr
    cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
Run Code Online (Sandbox Code Playgroud)

CMake让我们可以选择的C++ 11功能列在CMake变量CMAKE_CXX_KNOWN_FEATURES中.我知道CMake命令target_compile_features()尚未在稳定的CMake版本中发布.它目前存在于开发分支中,因此将来可能会发生变化.但是,如果有可能检测到某些C++源代码中使用了哪些C++ 11特性,我感兴趣.

更新:

在评论中建议不使用-std = c ++ 11编译器选项进行编译:

首先用g ++ …

c++ cmake c++11

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

使用std :: make_tuple时如何避免构造函数的未定义执行顺序

如果构造函数的执行顺序很重要,我如何使用std :: make_tuple?

例如,我猜A类的构造函数和类B的构造函数的执行顺序未定义为:

std::tuple<A, B> t(std::make_tuple(A(std::cin), B(std::cin)));
Run Code Online (Sandbox Code Playgroud)

在阅读了对该问题的评论后,我得出了这个结论

将std :: tuple转换为模板参数包

这就是说

template<typename... args>
std::tuple<args...> parse(std::istream &stream) {
  return std::make_tuple(args(stream)...);
}
Run Code Online (Sandbox Code Playgroud)

实现具有未定义的构造函数的执行顺序.

更新,提供一些上下文:

为了给我想要做的更多背景,这里是一个草图:

我想在CodeSynthesis XSD二进制解析/序列化的帮助下从stdin中读取一些序列化对象.以下是如何完成此类解析和序列化的示例:example/cxx/tree/binary/xdr/driver.cxx

xml_schema::istream<XDR> ixdr (xdr); 
std::auto_ptr<catalog> copy (new catalog (ixdr));
Run Code Online (Sandbox Code Playgroud)

我希望能够指定序列化对象具有的类的列表(例如,目录,目录,3个序列化对象的someOtherSerializableClass)并将该信息存储为typedef

template <typename... Args>
struct variadic_typedef {};

typedef variadic_typedef<catalog, catalog, someOtherSerializableClass> myTypes;
Run Code Online (Sandbox Code Playgroud)

如何建议是否可以"存储"模板参数包而不扩展它?

并在解析完成后找到一种方法来使用std :: tuple.草图:

auto serializedObjects(binaryParse<myTypes>(std::cin));
Run Code Online (Sandbox Code Playgroud)

其中serializedObjects将具有该类型

std::tuple<catalog, catalog, someOtherSerializableClass>
Run Code Online (Sandbox Code Playgroud)

c++ tuples variadic-templates c++11

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

如何从Cygwin的命令行安装Qt 5.2.1?

$ wget --quiet http://download.qt-project.org/official_releases/qt/5.2/5.2.1/qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe
$
Run Code Online (Sandbox Code Playgroud)

如上所示,我首先在Cygwin Bash shell中下载了Visual Studio的Qt包.

旁注:Cygwin中打包的Qt库对我没用,因为我需要使用Visual Studio C++编译器.

首先,我在文件上设置了正确的权限

$ chmod 755 qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe
Run Code Online (Sandbox Code Playgroud)

如果我这样开始

$ ./qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe
Run Code Online (Sandbox Code Playgroud)

显示了一个图形窗口(GUI),但这不是我想要的,因为我后来希望将安装过程写入我可以在Cygwin中运行的Bash脚本.

如果我添加选项--help,就像这样

$ ./qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe --help
Run Code Online (Sandbox Code Playgroud)

打开一个新的终端窗口,其中包含以下文本

Usage: SDKMaintenanceTool [OPTIONS]

User:
  --help                                      Show commandline usage                  
  --version                                   Show current version                    
  --checkupdates                              Check for updates and return an XML file describing
                                              the available updates                   
  --updater                                   Start in updater mode.                  
  --manage-packages                           Start in packagemanager mode.  
  --proxy                                     Set system proxy on Win and Mac.        
                                              This option has no effect on Linux.     
  --verbose                                   Show …
Run Code Online (Sandbox Code Playgroud)

installation qt command-line cygwin

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

使用带有重载函数的std :: make_tuple时如何避免static_cast

g ++说

错误:函数'constexpr std :: tuple的参数太多了

如果我在std::make_tuple通话中省略了static_cast

#include <tuple>

typedef int (*func_t)();

int number() {
  return 2;
}

double number(bool a) {
  return 1.2;
}

int main() {
  // With a static_cast it compiles without any error
  // std::tuple<func_t> tup = std::make_tuple(static_cast<func_t>(number));                                                               

  std::tuple<func_t> tup = std::make_tuple(number);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是完整的错误消息:

$ g++ -std=c++11 test.cc
test.cc: In function 'int main()':
test.cc:31:54: error: too many arguments to function 'constexpr std::tuple<typename std::__decay_and_strip<_Elements>::__type ...> std::make_tuple(_Elements&& ...) [with _Elements = {}; typename std::__decay_and_strip<_Elements>::__type …
Run Code Online (Sandbox Code Playgroud)

c++ tuples c++11

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

在运行时将方法名称转换为bean名称?

我在当前项目中使用BeanBinding很多,所以我的代码看起来像......

TypeA objA;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ, 
    objA,   BeanProperty.create("X"),
    objB,   BeanProperty.create("X"))
    .bind();
Run Code Online (Sandbox Code Playgroud)

objAobjB是有一个类的实例setX()方法.问题在于,如果我重构setX,setY那么我需要搜索这些字符串属性名称.我意识到我可以为属性名创建静态最终字符串但是如果我能让编译器为我做的工作,那就更好了.

理想情况下,我希望能够做到的是......

TypeA obja;
TypeB objB;
Bindings.createAutoBinding(UpdateStrategy.READ, 
    objA,   BeanProperty.create( Magic.returnBeanName(TypeA.class).getX() ),
    objB,   BeanProperty.create( Magic.returnBeanName(TypeB.class).setX() )
    .bind();
Run Code Online (Sandbox Code Playgroud)

看起来这可能通过一些代码综合和/或方面来实现.

java aop javabeans

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

何时应该运行“podman 系统迁移”?

似乎podman system migrate有时需要升级 podman 存储的文件的文件格式或目录结构。(我假设更改发生在目录 ~/.local/share/containers/ 下)

有没有一个命令可以告诉我是否podman system migrate需要运行?

这个问题是关于 podman 的无根使用(即以普通用户身份运行 podman)。

podman

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

以非 root 用户身份进行实验后如何重置 podman 和 buildah?

非 root 用户一直在尝试运行 podman 和 buildah 命令,但现在只想将所有内容重置为开始实验之前的状态(即所有容器映像和容器应与 buildah 和 podman 配置一起删除)。

我最好的猜测是跑步

testuser@linux:~$ rm -rf  ~/.local/share/containers/
Run Code Online (Sandbox Code Playgroud)

可能会起作用。

为此你推荐什么命令?

使用的软件版本

Ubuntu 18.04.2 与 https://launchpad.net/~projectatomic/+archive/ubuntu/ppa

testuser@linux:~$ dpkg -l|grep podm
ii  podman                                     1.3.2-1~dev~ubuntu18.04~ppa15                amd64        Manage pods, containers and container images.
testuser@linux:~$ dpkg -l|grep buildah
ii  buildah                                    1.9.0-1~dev~ubuntu18.04~ppa17                amd64        A command line tool used for creating OCI images.
testuser@linux:~$
Run Code Online (Sandbox Code Playgroud)

buildah podman

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

如何在不写入主目录的情况下运行 podman 和 buildah?

我的主目录中几乎没有剩余磁盘空间,但目录/scratch/tmpexperiment中有大量磁盘空间。该目录现在是空的。

我想尝试一下命令podmanbuildah(只是为了实验和学习)。实验结束后我想删除目录/scratch/tmpexperiment

是否可以指示podmanbuildah仅在 /scratch/tmpexperiment下创建和写入文件?

最好我的主目录在实验期间保持不变(或至少尽可能少地修改)。

我的用户没有 sudo 权限。这个问题是关于 podman 和 buildah 的非 root(无根)使用。安装的软件版本为podman 1.4.0和1.9.0-dev。

buildah podman

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

将远程Git存储库迁移到新的Gerrit项目

有一个运行Gerrit的服务器,我没有ssh登录权限。我有一个具有管理员权限的Gerrit帐户。

如何创建新的Gerrit项目,然后将远程Git存储库导入其中?我希望所有信息都可以迁移,例如分支机构和标签。

以下是更多信息:

Gerrit服务器主机名:gerrit.example.com

旧的Git存储库URL:ssh://git@git.example.com/foobar

新的Gerrit项目名称:foob​​ar

具有管理员权限的Gerrit用户帐户:erik

migration git gerrit

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

如何使用SVN使我们的代码同步?

我使用tortoiseSVN来同步我们的代码.但最近我发现有一些不太方便的东西.当我修改文件时,让我们说a.jsp,我的同事也可能修改这个文件,a.jsp,这可能会导致冲突,任何一个使用都需要先检查他的代码,另一个将需要更新到最新版本,然后逐个解决冲突,这实际上是错误的.

所以我需要在陆龟SVN中使用一些函数,它可以在我编辑时锁定a.jsp,并防止其他同事同时修改文件.我在tortoiseSVN中尝试了"锁定"功能,但它不起作用,当我锁定a.jsp文件时,我的同事仍然可以同时修改此文件而不进行任何提升和提醒,就像"你的同事正在修改这个文件,请修改,直到签入"...

还有更好的解决方案吗?提前致谢 !!

tortoisesvn conflict

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

当多个目标使用相同的源文件时,如何使用 --save-temps 保留程序集文件?

如果我编译C++程序/tmp/src/main.cc

#include <iostream>

int main() {

#ifdef demo1
  std::cout << "Output from demo1\n";
#endif

#ifdef demo2
  std::cout << "Output from demo2\n";
#endif

}
Run Code Online (Sandbox Code Playgroud)

使用文件/tmp/src/CMakeLists.txt中的构建指令

cmake_minimum_required(VERSION 3.11)
project(test_save_temps LANGUAGES CXX)

function(my_add_executable name)
  add_executable(${name})
  target_sources(${name} PRIVATE main.cc)

  # target_compile_options(${name} PRIVATE --save-temps)

  target_compile_definitions(${name} PRIVATE
    ${name}
  )
endfunction()

my_add_executable(demo1)
my_add_executable(demo2)
Run Code Online (Sandbox Code Playgroud)

一切看起来都不错。

cmake_minimum_required(VERSION 3.11)
project(test_save_temps LANGUAGES CXX)

function(my_add_executable name)
  add_executable(${name})
  target_sources(${name} PRIVATE main.cc)

  # target_compile_options(${name} PRIVATE --save-temps)

  target_compile_definitions(${name} PRIVATE
    ${name}
  )
endfunction()

my_add_executable(demo1)
my_add_executable(demo2)
Run Code Online (Sandbox Code Playgroud)

但是如果我从文件/tmp/src/CMakeLists.txt中删除注释 以激活该行

 target_compile_options(${name} PRIVATE --save-temps)
Run Code Online (Sandbox Code Playgroud)

并做同样的事情

ubuntu@laptop:/tmp$ mkdir …
Run Code Online (Sandbox Code Playgroud)

c++ assembly g++ cmake

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