小编dav*_*ler的帖子

当我改变它时,指向向量中的元素的指针会发生什么?

我有一个std::vector<int>指针指向int*向量中的元素.假设指针指向第三个元素:pointer=&vector.at(2).如果我现在对矢量进行混洗,它是否仍然指向相同的元素(第三个),还是它指向新的位置,而这个元素曾经是第三个元素现在已经移动了?

在那之后,我想让问题更加通用:当向量扩展或缩小时,向量中元素的指针和迭代器如何表现?

c++ pointers vector

16
推荐指数
6
解决办法
3056
查看次数

不使用#define捕获__LINE__和__FILE__

试图确定以下C风格代码的"现代"实现:

#define logError(...) log(__FILE__, __LINE__, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

有可能使用可变参数模板或不依赖于类似的类似物来捕获它#define吗?

期望的用例:

logError( "Oh no! An error occurred!" );
Run Code Online (Sandbox Code Playgroud)

在哪里__FILE__,并__LINE__在引擎盖下捕获,但反映了logError从哪里调用的文件名和行号.

c++ c++11

10
推荐指数
2
解决办法
1171
查看次数

Qt5 - 在 QML TableView 中显示动态数据模型

我正在为 GUI 开发跟踪窗口。我在 QML 端使用 TableView 元素来显示将不断更新的数据。我怎样才能用数据填充这个元素?元素的数量以及每个元素的数据每隔几毫秒就会发生变化。

我认为信号/插槽实现将是理想的,当数据发生变化时,产生一个信号来触发插槽函数来更新 TableView 中显示的值?沿着这些路线的东西。

提前致谢!

主文件

import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
import QtQuick 2.1

....
TableView {
                anchors.fill: parent
                id: traceTable
                //table data comes from a model
                model: traceTableModel
                //Component.onCompleted: classInstance.popAndDisplayMsg(classInstance)
                TableViewColumn { role: "index"; title: "Index";  width: 0.25 * mainWindow.width; }
                TableViewColumn { role: "type"; title: "Type"; width: 0.25 * mainWindow.width; }
                TableViewColumn { role: "uid"; title: "ID"; width: 0.25 * mainWindow.width; }
                TableViewColumn { role: "timestamp"; title: "Timestamp"; …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qt5

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

将CMake与Qt5和Qt插件一起使用

我想避免使用qmake.pro文件。问题是我无法cmake与很好地合作Qt Plugins。我已经包含了下面的代码,这些代码显示了界面,插件和加载程序,它们对于给定的.pro文件均能正常工作,但是我无法弄清楚如何将此功能转移到cmake

插件界面

加载程序已知的纯虚拟接口。

#include <QtCore/qglobal.h>

class HelloPluginInterface
{
public:
    virtual void DoSomething() const = 0;
};

Q_DECLARE_INTERFACE( HelloPluginInterface, "com.harbrick.Qt.HelloPluginInterface")
Run Code Online (Sandbox Code Playgroud)

插入

成为.so加载程序要加载的插件。

#include <QtPlugin>
#include "helloplugin_global.h"

class HelloPlugin : public QObject, public HelloPluginInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA( IID "com.harbrick.Qt.HelloPluginInterface" )
    Q_INTERFACES( HelloPluginInterface )

public:
    void DoSomething() const;
};
Run Code Online (Sandbox Code Playgroud)

插件加载器

void MainWindow::LoadPlugin( const QString& pathToLibrary )
{
    QPluginLoader loader( pathToLibrary );
    QObject* instance = loader.instance();

    if( instance ) …
Run Code Online (Sandbox Code Playgroud)

c++ qt qmake cmake qt5

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

使用std :: string调用classes方法

假设我有以下类:(可能是元生成的)

class MyClass
{
    public:
        myMethod(); 
    ...
}
Run Code Online (Sandbox Code Playgroud)

假设这里有一些事情:

1.) I have the class name from somewhere (let's pretend)
2.) I have the names of the class methods somewhere ( std::map< std::string, std::function> ... perhaps? )
Run Code Online (Sandbox Code Playgroud)

所以...因为我可能不知道myMethod()运行时的名称,有没有办法用它来调用它std::string?这假设我有一个存储在某处的类函数的名称.

MyClass example;

std::string funcName{ findMyMethod() };//get std::string name of myMethod

example.someHowRunMyMethodUsing_funcName_();
Run Code Online (Sandbox Code Playgroud)

我知道C++通常不适合类似内省的情况,但我想弄明白这一点.

谢谢!

c++ c++11

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

C++包装C代码时出现重复的const错误

我有一些包含在C++应用程序中的C代码,这里的重要部分是:

C代码

ifdef __cplusplus
extern "C" {
endif

...
typedef void* problem_type;

...
int problematic_fn_proto( const problem_type const arg );

ifdef __cplusplus
}
endif
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于duplicate 'const'错误,这将无法编译.这typedef是导致问题的原因.如果我只是将函数的原型更改为:

int problematic_fn_proto( const void* const arg );
Run Code Online (Sandbox Code Playgroud)

没有更多的问题.不幸的是,我无法删除typedef.这里有解决方案吗?我可以对C部分进行其他更改,但是typedef和它作为函数的参数必须保留.

c c++ c++11 g++4.8

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

如何从QMdiSubWindow中删除Qt图标

试图从QMdiSubWindow中删除Qt图标但收效甚微.下面是一张显示左上角图标的图片.

在此输入图像描述

这是一些代码,似乎应该将Icon设置为空,但不是.

QMdiSubWindow* sub = new QMdiSubWindow;

sub->setAttribute( Qt::WA_DeleteOnClose );
sub->setWidget( myWidget );
sub->setWindowIcon( QIcon() );
//tried this too
//sub->setWindowIcon( QIcon("") );

mdiArea->addSubWindow( traceSub );
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ qt

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

正则表达式,用于识别C中的变量声明

我正在使用正则表达式来识别C中的变量声明,我已经得到了这个.

[a-zA-Z_][a-zA-Z0-9]*
Run Code Online (Sandbox Code Playgroud)

有没有更好的解决方案?

c regex lex

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

带有QAbstractItemModel和上下文菜单的Qml 2.0 TableView

我有TableView连接的Qml 2.0控件QAbstractItemModel.我想创建一个可以更改属性的上下文菜单,或者只是从模型中调用具体对象的方法.

例:

QAbstractItemModel有一个std::vector<Person>.Person有一个方法alter()可以做一些改变(任何改变,哪些改变都无关紧要,重点是我们能够调用该方法).

右键单击该行时,菜单会显示一个项目Alter.

我能找到的就是如何制作菜单.

  rowDelegate: Item {
    Menu {
      id: myContextMenu
      MenuItem {text: "Alter"; onTriggered: {} }
    }
    MouseArea {
      id: longPressArea
      anchors.fill: parent
      acceptedButtons: Qt.LeftButton | Qt.RightButton
      onClicked: {
        if (mouse.button == Qt.RightButton)
          myContextMenu.popup()
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

但我仍然不知道如何将菜单与行的确切对象连接起来.

c++ qt menu qml qt5

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

作为返回类型的元组,是否优化了未访问的值?

我以a的形式从函数返回三个项目std::tuple.

... myFunction()
{
    ...
    return std::tuple< int, unsigned long long, unsigned int >{ errorCode, timeStamp, sizeOfBuffer };
}
Run Code Online (Sandbox Code Playgroud)

由于必须使用std::get或访问返回值std::tie,编译器是否针对未使用的值进行优化(g ++ 4.8)?

c++ c++11 g++4.8

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

从二进制文件读取/写入十六进制字节

我需要以二进制模式读取文件并将字节作为十六进制值存储在任何STL容器中(最好是std :: list).后来我需要将它们写回文件,也是二进制模式.所以,我宣布,

typedef unsigned char BYTE;

std::ifstream File("File_Name", std::ios::binary);

std::list<BYTE> File_Bytes;
Run Code Online (Sandbox Code Playgroud)

通过所有的搜索,我理解了一些事情.可以使用std :: istream :: read()或std :: istreambuf_iterator进行读取(我可能非常错误.请纠正我.)而read()函数只将char*作为内存中存储字节的参数输入流的大小.

如果我必须将文件中的字节读入BYTE列表并再次使用istream和ostream分别从BYTE列表写入文件,我将如何执行此操作?请为我澄清一下.谢谢.

注意:这实际上是用于霍夫曼编码器/解码器,我需要在程序内部压缩和解压缩,并将解压缩的位写为输出文件.这是为了验证压缩的无损性和程序的正确性.另外,任何人都可以告诉我如何将编码的二进制位写入文件以及编码的Huffman文件具有哪些文件扩展名?非常感谢你.

c++ fstream stl ifstream ofstream

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

无法将嵌套if转换为if(condition1 || condition2)

我有以下代码正常运行.

if((strcmppgm2ram((char*)name, (ROM char*)"products.htm") != 0))
{
    if((strcmppgm2ram((char*)name, (ROM char*)"restock.htm") != 0))
    {
        return HTTP_IO_DONE;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想清理它并把它放在表格中:

if((strcmppgm2ram((char*)name, (ROM char*)"products.htm") != 0) || (strcmppgm2ram((char*)name, (ROM char*)"restock.htm") !=0))
{   
        return HTTP_IO_DONE;    
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,后者无法正常工作.有什么我忽略了?提前致谢!为了这个问题,PS strcmp == strcmppgm2ram.

c if-statement strcmp

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

返回泛型函数指针的函数

说我有两个功能:

fn function_with_one_argument(one: i64) -> bool{
    one==one // irrelevant
}

fn function_with_two_arguments(one: i64, two: i64) -> bool {
    one==two // irrelevant
}
Run Code Online (Sandbox Code Playgroud)

给定不同的输入值,我想返回一个不同的函数指针:

fn main() {
    println!("\n\n{:?}\n\n", get_function_pointer(1)(321));
    println!("{:?}", get_function_pointer(2)(321/*, 321*/));
}
Run Code Online (Sandbox Code Playgroud)

如何表示返回值以返回指向不同形状函数的指针?

fn get_function_pointer(id: i64) -> /***/(fn(i64) -> bool)/***/ {
    match id {
        1 => function_with_one_argument,
        // 2 => function_with_two_arguments, /*How do we make this work?*?
        _ => panic!("!?!?!")
    }
}
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

c++ ×10

c++11 ×4

qt ×4

c ×3

qt5 ×3

g++4.8 ×2

qml ×2

cmake ×1

fstream ×1

if-statement ×1

ifstream ×1

lex ×1

menu ×1

ofstream ×1

pointers ×1

qmake ×1

regex ×1

rust ×1

stl ×1

strcmp ×1

vector ×1