我有一个单身人士:
struct foo {
static foo& instance() {
static foo f;
return f;
}
};
Run Code Online (Sandbox Code Playgroud)
在重新安排一些代码时,我最终得到了"错误"这句话:
foo::foo::instance()
Run Code Online (Sandbox Code Playgroud)
但是我的编译器认为这是正确的(gcc 4.7).事实上,甚至foo::foo::foo::instance()编译.为什么?
我包含来自第三方库的文件,该文件引发了一个错误,可以将其降级为警告-fpermissive.但是因为我不想用这些警告"污染"我的编译日志,所以我想完全禁用这些消息.
到目前为止,我在包含文件时-fpermissive使用诊断编译指示设置选项; 就像是:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-fpermissive"
#include <third-party-file.h>
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
由于gcc通常提供-f标志的"正面"和"负面"版本,我想忽略了"不允许"的功能:
#pragma GCC diagnostic ignored "-fno-permissive"
#include <third-party-file.h>
Run Code Online (Sandbox Code Playgroud)
但似乎没有-fpermissive标志的"负面"版本(我正在使用gcc 4.6.3;但即使版本4.7.0 也没有它).
我有机会模仿这种行为吗?谢谢!
我想通过第三方函数调用另一个方法; 但两者都使用可变参数模板.例如:
void third_party(int n, std::function<void(int)> f)
{
f(n);
}
struct foo
{
template <typename... Args>
void invoke(int n, Args&&... args)
{
auto bound = std::bind(&foo::invoke_impl<Args...>, this,
std::placeholders::_1, std::forward<Args>(args)...);
third_party(n, bound);
}
template <typename... Args>
void invoke_impl(int, Args&&...)
{
}
};
foo f;
f.invoke(1, 2);
Run Code Online (Sandbox Code Playgroud)
问题是,我收到编译错误:
/usr/include/c++/4.7/functional:1206:35: error: cannot bind ‘int’ lvalue to ‘int&&’
Run Code Online (Sandbox Code Playgroud)
我尝试使用lambda,但也许 GCC 4.8还没有处理语法; 这是我试过的:
auto bound = [this, &args...] (int k) { invoke_impl(k, std::foward<Args>(args)...); };
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: expected ‘,’ before ‘...’ token
error: expected identifier …Run Code Online (Sandbox Code Playgroud) 我编写了一个自定义数据模型,用几个QTableViews显示.
从技术上讲,一切正常:我的观点显示了我的模型所做的更改.我的数据模型是可编辑的,并且该setData()方法确实发出dataChanged()信号并true在成功编辑时返回.
但是,我的问题是我必须将鼠标移到a QTableView上以显示实际的更改,而我希望所有视图在制作时显示更改,而不需要与视图交互以使它们成为更新.
任何的想法?谢谢,
可能有必要提一下,我不使用默认Qt::EditRole角色来编辑数据,而是使用自定义枚举值(命名ActiveRole).
这是我正在寻找的:我的数据模型包含有关如何显示数据的属性,用于生成馈送到viewS的样式表.
因此,当改变模型时,对于每个视图,其所有项都受到影响,这dataChanged()就是发送信号的原因,其中索引覆盖所有单元.
我也尝试发射layoutChanged(),但它似乎没有改变我的情况下的行为.
以下是该setData()方法的摘录:
bool DataModel::setData(QModelIndex const& idx, QVariant const& value, int role)
{
if (ActiveRole == role)
{
// Update data...
QModelIndex topLeft = index(0, 0);
QModelIndex bottomRight = index(rowCount() - 1, columnCount() - 1);
emit dataChanged(topLeft, bottomRight);
emit layoutChanged();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
以下是该data()方法的示例:
QVariant DataModel::data(QModelIndex const& idx, int role) const …Run Code Online (Sandbox Code Playgroud) 我用gdb-many-windows它emacs进行调试.
最近,我发现了如何缓冲区中移动到另一个X窗口使用C-x 5 2.
我觉得很方便:因为我使用多个显示器,我可以有一个带有源和变量的窗口,以及另一个窗口中的gdb命令行.
但我的问题是当我执行一步一步时gdb:当它打开另一个源文件时,它会在命令行所在的同一窗口中执行此操作,而我希望在另一个窗口中更新它.
有人知道如何调整gdb或emacs做到这一点?谢谢,
我有一个菱形的类层次结构,其中没有默认构造函数,也没有复制构造函数.我有两个构造函数是一个"移动",另一个是对对象的左值引用:
struct base {
base(base&&) = default;
base(member_type&& m): member_(std::move(m)) {}
member_type member_;
};
struct virt_1: virtual base {
virt_1(virt_1&& rhs): base(std::move(rhs)) {}
virt_1(member_type&& m): base(std::move(m)) {}
};
struct virt_2: virtual base {
virt_2(virt_2&& rhs): base(std::move(rhs)) {}
virt_2(member_type&& m): base(std::move(m)) {}
};
struct concrete: virt_1, virt_2 {
concrete(concrete&& rhs) // ???
};
Run Code Online (Sandbox Code Playgroud)
除了不使用菱形层次结构外,是否可以为具体类实现移动构造函数?
谢谢!
为了在 Windows 上移植 Linux 程序(使用 cygwin 和 gcc),我试图正确找到提供pkg-config文件的库(在我的情况下,这些库是由 Graphviz 带来的)。
直接的方法适用于 Linux:
find_package(PkgConfig)
pkg_check_modules(LIB_GRAPHVIZ libcdt libgvc libgraph)
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,我使用安装程序(cygwin 路径:)手动安装了 Graphviz /cygdrive/c/graphviz。为了找到这些pkg-config文件,我导出了PKG_CONFIG_PATH变量,以便.pc在配置 CMake 之前找到这些文件:
export PKG_CONFIG_PATH=/cygdrive/c/graphviz/pkgconfig
cmake $srcdir
Run Code Online (Sandbox Code Playgroud)
配置工作正常,但是.pc文件没有适当的前缀(这会导致包含和链接目录无效):
$ pkg-config --variable=prefix libgraph
/c/graphviz-mingw/local.2.20.3
Run Code Online (Sandbox Code Playgroud)
关于pkg-config,解决方案是使用--define-variable参数调用它,例如这里是如何获得有效的includedir:
$ pkg-config --define-variable=prefix=/cygdrive/c/graphviz --variable=includedir libgraph
/cygdrive/c/graphviz/include/graphviz
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在 CMake 中调用它时提供--define-variable参数pkg-config?
PkgConfig定义PKG_CONFIG_EXECUTABLE指向pkg-config程序的那个;我试图将我的选项附加到这个变量:
set(PKG_CONFIG_EXECUTABLE "${PKG_CONFIG_EXECUTABLE} --define-variable=/cygdrive/c/graphviz")
Run Code Online (Sandbox Code Playgroud)
但pkg_check_modules()未能检测到我的库。我的理解是调用将execute_process()的内容 …
我正在尝试调试(从Windows)Android应用程序内部提供的本机库(使用NDK v13b构建).该库是在Android Studio之外构建的,它不使用Gradle(使用CMake).
我的库是用调试构建的; Studio中的调试配置是Hybrid,我给出了相应的符号目录.要"导入"我的库,我只需将项目目录中的文件.so和.jar文件复制到适当的位置(libs对于JAR,jniLibs对于SO).
当库建立在单独的机器(Linux)上时,只要我重新映射源位置(即使用settings set target.source-map),我就可以一步一步地完成任务.
但是,当我在Windows系统上构建库时,逐步不再起作用.
我注意到行为的不同取决于我使用"内置Linux"或"内置Windows"库进行调试.使用from-Linux进行调试时,LLDB命令image list指示库路径位于初始构建目录中.但是,在从Windows调试时,它就在C:\Users\foo\.lldb\module_cache\remote-android\.cache....这个版本的库似乎被删除了.
为什么这种行为的差异?我怎样才能1.在模块缓存中使用我的库的原始副本,或2.直接使用构建库?
谢谢,
我正在尝试使用 CMake 功能从构建树导出/导入目标(请参阅此 wiki 页面)。我有这个dependency图书馆:
add_library(dependency SHARED dependency.cpp)
export(TARGETS dependency FILE dependency-targets.cmake)
Run Code Online (Sandbox Code Playgroud)
一个可执行文件在另一个项目中使用这个库:
include(${DEPENDENCY_PATH}/dependency-targets.cmake)
add_executable(main-app main.cpp)
target_link_libraries(main-app dependency)
Run Code Online (Sandbox Code Playgroud)
这工作正常。虽然我明白,“只有”这个导出/导入机制提供参考外部二进制文件的便捷方式,我想知道是否dependency可以在运行时编译make的main-app?使用导入机制(我怀疑)还是使用另一个?
我有一个为Android构建的C ++库,将其打包为Android归档文件(.aar),以及一些Java类和清单。
一切都在Android Studio之外完成。要打包.aar,我有一个目录,其中包含:
app/src/main/jniLibs/arm64-v8a/:带库的目录app/src/main/java:带有Java类的目录该目录还包含清单和Gradle文件。
这里是build.gradle在app目录:
apply plugin: 'com.android.library'
android {
compileSdkVersion 27
buildToolsVersion "27.0.2"
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
}
buildTypes {
release {
minifyEnabled false
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:27.0.2'
}
apply plugin: 'maven-publish'
publishing {
publications {
fooapp(MavenPublication) {
groupId 'com.example'
artifactId 'fooapp'
version "develop"
artifact('build/outputs/aar/app-release.aar')
}
}
repositories {
maven {
mavenLocal()
}
} …Run Code Online (Sandbox Code Playgroud)