我有三个功能,我想合并在一起.
每个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) 假设我正在使用编译为JavaScript的语言编写NodeJS项目,例如TypeScript.随着打字稿(或使用巴贝尔其他的事情)我有编译我的代码为JavaScript的任何版本的选项,无论是ES3,ES5,ES6,ES2017,等.
显然,如果我在编写客户端的东西,我会坚持使用早期版本ES5来维护用户的兼容性.但是,由于我正在为最新版本的NodeJS编写服务器端的东西,我可以使用任何这些选项.我想知道的是,我应该使用哪个版本来提供最佳性能?
NodeJS的解释器V8根据源代码的编写方式提供了不同的优化,因此我认为选择一个或另一个可能会带来不同的好处.一方面,您会认为选择较旧版本的JS会更好,因为它已经存在更长时间并且有更多时间进行优化.另一方面,编译到更高版本的JS会产生更清晰的代码,并依赖于更新的可用功能,这些功能也可能有所帮助.
任何想法/反馈将不胜感激!
在大多数代码编辑器中,文本突出显示不会删除语法颜色。
例如:


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

是否可以在文本突出显示期间保留语法突出显示?
仅供参考:我正在使用QPlainTextEdit和QSyntaxHighlighter来创建编辑器。我试过更改 的调色板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) 我正在查看一些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) 我的 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 包含这样的功能?
在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.
如何检查是否按住 SHIFT 键并使用 QKeyEvent 按下 TAB 键?
我试过使用:
(event->key() == Qt::Key_Tab && event->modifiers() == Qt::ShiftModifier)
Run Code Online (Sandbox Code Playgroud)
但是,当按住 shift 键时event->key()不等于Qt::Key_Tab。
我正在寻找一种快速有效的方法来使用 QPainter 绘制 QPixmap,但让像素图看起来比正常情况更暗。是否有某种过滤器或效果可以在绘制时应用于 QPixmap 或 QPainter 以创建这种效果?
目前,我正在迭代一个向量,以便将其转换为 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调用的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) 在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一样的信号和插槽系统.虽然我不知道如何自己做这样的事情.
谢谢你的阅读; 我希望你有一些建议.
假设我有一个尺寸为 (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++ ×8
qt ×5
qpainter ×2
qpixmap ×2
break ×1
c ×1
c++11 ×1
cpython ×1
extern-c ×1
javascript ×1
kotlin ×1
lifetime ×1
loops ×1
move ×1
node.js ×1
overloading ×1
pylint ×1
python ×1
qjson ×1
qkeyevent ×1
qt-signals ×1
qt5 ×1
rust ×1
std-function ×1
subclass ×1
templates ×1
transpiler ×1
typescript ×1
v8 ×1
vector ×1