小编Gri*_*ort的帖子

如何将具有不同参数的std :: function传递给同一个函数

我有三个功能,我想合并在一起.

每个std::function参数都作为第一个参数,然后在try/ catch块中执行.

问题是,有三种不同类型的功能.没有参数的函数,带有一个整数参数的函数和带有两个整数参数的函数.具有整数参数的参数也具有通过原始函数传递的相应参数.

可以看出,每个函数几乎都是相同的,所以如果我可以将它们合并在一起会很好.但是,我不确定无论如何设置一个可以接收任何形式的参数,std::function并且还依赖于它已经提供了相应的数据来使用.

以下是功能:

void run_callback(std::function<void()>& func) {
    try {
        func();
    } catch(const std::exception& ex) {
        print_callback_error(ex.what());
    } catch(const std::string& ex) {
        print_callback_error(ex.c_str());
    } catch(...) {
        print_callback_error();
    }
}

void run_callback_int(std::function<void(int)>& func, int data) {
    try {
        func(data);
    } catch(const std::exception& ex) {
        print_callback_error(ex.what());
    } catch(const std::string& ex) {
        print_callback_error(ex.c_str());
    } catch(...) {
        print_callback_error();
    }
}

void run_callback_intint(std::function<void(int, int)>& func, int data1, int data2) {
    try {
        func(data1, data2);
    } catch(const …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11 std-function

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

我应该编译哪个版本的JavaScript?

假设我正在使用编译为JavaScript的语言编写NodeJS项目,例如TypeScript.随着打字稿(或使用巴贝尔其他的事情)我有编译我的代码为JavaScript的任何版本的选项,无论是ES3,ES5,ES6,ES2017,等.

显然,如果我在编写客户端的东西,我会坚持使用早期版本ES5来维护用户的兼容性.但是,由于我正在为最新版本的NodeJS编写服务器端的东西,我可以使用任何这些选项.我想知道的是,我应该使用哪个版本来提供最佳性能?

NodeJS的解释器V8根据源代码的编写方式提供了不同的优化,因此我认为选择一个或另一个可能会带来不同的好处.一方面,您会认为选择较旧版本的JS会更好,因为它已经存在更长时间并且有更多时间进行优化.另一方面,编译到更高版本的JS会产生更清晰的代码,并依赖于更新的可用功能,这些功能也可能有所帮助.

任何想法/反馈将不胜感激!

javascript v8 node.js transpiler typescript

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

如何在文本突出显示期间保留语法突出显示

在大多数代码编辑器中,文本突出显示不会删除语法颜色。

例如:

  • 视觉工作室

示例 Visual Studio

  • 崇高的文字

示例 Sublime 文本

我想在我用 QT 制作的代码编辑器中模拟这个功能;但是,文本突出显示会将所有文本变成单一颜色:

数据表 对比 dsad

是否可以在文本突出显示期间保留语法突出显示?


仅供参考:我正在使用QPlainTextEditQSyntaxHighlighter来创建编辑器。我试过更改 的调色板QPlainTextEdit,但似乎找不到禁用HighlightedText效果的方法。


编辑:这是我用来添加一些上下文的代码的简化版本:

void MyHighlighter::highlightBlock(const QString& text) {
  // Sets characters 0 ~ 10 to be colored rgb(100, 200, 100)
  QTextCharFormat temp;
  temp.setForeground(QColor(100, 200, 100));
  setFormat(0, 10, temp);
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qplaintextedit

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

具有生命周期的循环意味着什么?

我正在查看一些Rust代码并看到了类似的内容:

'running: loop {
    // insert code here
    if(/* some condition */) {
        break 'running;
    }
}
Run Code Online (Sandbox Code Playgroud)

用生命周期"标记"循环是什么意思?这样做有什么好处和不同之处:

loop {
    // insert code here
    if(/* some condition */) {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

loops break lifetime rust

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

可以为 PyLint 的不可检测模块创建“存根”文件吗?

我的 Python 项目是从 C++ 应用程序嵌入和解释的。此应用程序还将某些类/函数公开到 Python 可以导入的名为“Monsters”的模块中。因此,从中导入“史莱姆”类将如下所示:from Monsters import Slime

问题是 PyLint 由于其实现的性质而无法检测到此模块。因此,它会生成错误,例如:Unable to import 'Monsters'。这些类型的错误本身不是问题,因为它们可以被抑制而不会出现问题。

但是,该模块包含需要在 Python 中扩展的类。这些子类可以访问它们在 C++ 实现中构建的父变量/函数。访问它们会导致另一个错误:Instance of 'Child_Slime' has no 'x' member。“x”属性在父类中实现,但 PyLint 不知道它。

这种检查对象/类中的某些成员是否存在的能力是我想使用 PyLint 的一个重要原因,所以如果我不必完全抑制警告,我更愿意。有什么方法可以生成类似于 MyPy 的存根文件,但用于 PyLint?如果没有,是否有任何替代的 Python linter 包含这样的功能?

python cpython subclass pylint

5
推荐指数
0
解决办法
299
查看次数

Kotlin:可以通过元编程在编译期间修改函数吗?

在JavaScript/Python等动态语言中,可以在运行时覆盖或"修改"函数.例如,为了修改alertJS中的函数,可以这样做:

const _prev_alert = window.alert;
window.alert = function() {
  _prev_alert.apply(this, arguments);
  console.log("Alert function was called!");
}
Run Code Online (Sandbox Code Playgroud)

这将输出"调用警报功能!" 每次alert调用函数时都到控制台.

现在,显然这样的事情在Kotlin-JVM或Kotlin-Native的运行时期间是不可能的,因为它们具有静态特性.但是,对于那些相同的语言,是否有可能在编译期间修改未编译的函数?我不是指来自库的预编译函数,而是我在我正在开发的同一个项目中编写的函数.

例如,假设我有一个我写的函数get_number.我可以修改get_number为返回一个不同的数字而不改变它在main中的调用方式而不直接修改它的代码吗?(或者有一种方法我可以写原件,get_number所以修改可能在线下吗?)

fun main(args: Array<String>) {
    println(get_number())
}

fun get_number(): Int {
    return 3
}

// Without modifying the code above, can I get main to print something besides 3?
Run Code Online (Sandbox Code Playgroud)

我一直在阅读Kotlin的Annotations and Reflections元编程,所以也许那些可以控制编译器的行为并覆盖get_number代码?或者这是完全的疯狂,这种性质的唯一方法是通过在Kotlin上开发我自己的,独立的元编程包装器?

此外,只是为了澄清,这个问题不是关于Kotlin-JS,答案(如果存在)应该适用于Kotlin-JVM或Native.

overloading self-modifying kotlin kotlin-extension

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

如何检查 [Shift + Tab] 在 QT 中是否被按下

如何检查是否按住 SHIFT 键并使用 QKeyEvent 按下 TAB 键?

我试过使用:

(event->key() == Qt::Key_Tab && event->modifiers() == Qt::ShiftModifier)
Run Code Online (Sandbox Code Playgroud)

但是,当按住 shift 键时event->key()不等于Qt::Key_Tab

c++ qt qkeyevent

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

如何绘制变暗的 QPixmap?

我正在寻找一种快速有效的方法来使用 QPainter 绘制 QPixmap,但让像素图看起来比正常情况更暗。是否有某种过滤器或效果可以在绘制时应用于 QPixmap 或 QPainter 以创建这种效果?

c++ qt qpixmap qpainter qt5

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

将 Vector 转换为 QJsonArray 的最快方法?

目前,我正在迭代一个向量,以便将其转换为 QJsonArray:

QJsonArray toJson(const std::vector<unsigned short>& myVec) {
    QJsonArray result;
    for(auto i = myVec.begin(); i != myVec.end(); i++) {
        result.push_back((*i));
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

然而,这会导致我的程序出现轻微的滞后峰值。是否有其他方法可以接收带有向量数据的 QJsonArray?(它不需要是深拷贝。)

c++ qt move vector qjson

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

无法在没有错误的情况下从C调用C++代码

我正在尝试编写一个可以从C调用的C++库.但是,每当我尝试编写一个最小的例子时,它就会因未定义的引用而崩溃.这是我的代码:


mylibrary.h

#ifndef __MY_CPP_THING_H
#define __MY_CPP_THING_H

#ifdef __cplusplus
extern "C" {
#endif

void printSomething();

#ifdef __cplusplus
}
#endif

#endif
Run Code Online (Sandbox Code Playgroud)

mylibrary.cpp

#include <iostream>

#include "mylibrary.h"

extern "C" {

void printSomething() {
    std::cout << "PLEASE PRINT\n";
}

}
Run Code Online (Sandbox Code Playgroud)

main.c中

#include "mylibrary.h"

int main() {
    printSomething();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译过程如下:

g++ -c mylibrary.cpp -o mylibrary.o (创建"mylibrary.o")

ar rcs libmylibrary.a mylibrary.o (创建静态库"libmylibrary.a")

gcc main.c -L. -lmylibrary (链接静态库并编译C源文件)

但是,我收到此错误转储:

mylibrary.o:mylibrary.cpp:(.text+0x17): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
mylibrary.o:mylibrary.cpp:(.text+0x32): undefined …
Run Code Online (Sandbox Code Playgroud)

c c++ extern-c

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

修改C++中现有函数的任何技巧或窍门?

在JavaScript中,您可以执行以下操作:

function bunny() { alert("The bunny jumped."); }

var oldBunny = bunny;
function bunny() {
  oldBunny();
  alert("The bunny also ran.");
}

bunny(); // The bunny Jumped. The bunny also ran.
Run Code Online (Sandbox Code Playgroud)

可以看出,旧的"bunny"函数通过复制到变量来附加代码,然后重新创建具有相同名称的函数.原始函数的副本运行,新代码也会运行.

我想在C++中复制一个类似的机制.

现在,在您崩溃并开始解释静态和动态语言之间的差异之前,我明白了.我不是在寻找与所提供的相同的东西,但我确实希望有类似的东西.

此外,我不是试图修改现有代码; 我希望格式化自己的源代码,以允许其他用户使用这样的机制.

我的第一个想法之一就是在代码中设置各种宏,以后可以被其他文件修改.

另一个想法是创建一个像QT一样的信号和插槽系统.虽然我不知道如何自己做这样的事情.

谢谢你的阅读; 我希望你有一些建议.

c++ signals-slots qt-signals

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

如何在不切断图像部分的情况下围绕中心旋转 QPixmap

假设我有一个尺寸为 (20 x 100) 的 QPixmap。如何创建此 QPixmap 的副本,该副本已旋转了特定量并具有新尺寸以分配旋转像素图的新尺寸?

我找到了多个关于如何使用 QPainter 和 QTransform 进行旋转的示例,但似乎没有一个提供适当的方式来防止 QPixmap 被切断。

到目前为止我发现的最好的例子是:

// original = Original QPixmap

QSize size = original.size();

QPixmap newPixmap(size);
newPixmap.fill(QColor::fromRgb(0, 0, 0, 0));

QPainter p(&newPixmap);
p.translate(size.height() / 2, size.height() / 2);
p.rotate(35); // Any rotation, for this example 35 degrees
p.translate(size.height() / -2, size.height() / -2);
p.drawPixmap(0, 0, original);
p.end();
Run Code Online (Sandbox Code Playgroud)

这将旋转 QPixmap,并将其放置在相同尺寸的新 QPixmap 上。但是,我不知道如何修改它以使用新维度。

我什至尝试过简单地修改新像素图的初始大小,但这只会导致图像偏离中心(并且由于某种原因仍然被切断?)

任何支持将不胜感激!

c++ qt image-rotation qpixmap qpainter

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