有没有办法在C++中装饰函数或方法,如python风格?
@decorator
def decorated(self, *args, **kwargs):
pass
Run Code Online (Sandbox Code Playgroud)
以宏为例:
DECORATE(decorator_method)
int decorated(int a, float b = 0)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要么
DECORATOR_MACRO
void decorated(mytype& a, mytype2* b)
{
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
我想async/await
在C++(UE4框架)中使用语法,但由于跨平台代码,我不确定是否可能......或者可能?如果是,我该如何使用它?
也有await
和__await
(resumable
,yield
和__yield_value
也)在Visual Studio中突出显示的关键字.有什么区别?也许不是所有的编译器都支持这个关键字或单独支持?
gcc
,clang
是接受吗?或者不接受,我可以单独为每个平台使用宏.
PyPy是否支持aio和Python 3.5?
我需要性能PyPy
和异步代码asyncio
.我还需要async/await
在我的代码中使用.那可能吗?
如果是这样,有什么细微差别?
是否可以取消__FUNCTION__
引用宏?我需要从其他对象调用同名函数:
this->__FUNCTION__(params)
Run Code Online (Sandbox Code Playgroud)
但是 function 给出了带引号的函数名称...
我的RPC方法中有两个操作:
async def my_rpc(self, data):
async with self.Engine() as conn:
await conn.execute("SELECT ... FROM MyTable");
... # It seems the table MyTable can be changed by another RPC
await conn.execute("UPDATA MyTable ...");
Run Code Online (Sandbox Code Playgroud)
另一种 RPC 方法可以在操作“my_rpc”完成之前更改数据库(在 SQL 查询的两次等待之间)。如何避免这种情况呢?
self.Engine 的代码(使用 engine 调用aiopg.sa.create_engine
):
class ConnectionContextManager(object):
def __init__(self, engine):
self.conn = None
self.engine = engine
async def __aenter__(self):
if self.engine:
self.conn = await self.engine.acquire()
return self.conn
async def __aexit__(self, exc_type, exc, tb):
try:
self.engine.release(self.conn)
self.conn.close()
finally:
self.conn = None
self.engine = …
Run Code Online (Sandbox Code Playgroud) __debugbreak
C++中有函数。
我需要在我的 Python 代码(使用 PyCharm IDE)中使用类似的函数来中断运行时并恢复可能性。
在我基于使用 PyCharm 调试器调试的 asyncio 和 asyncio tcp 连接的项目中,我遇到了非常非常荒谬的错误。
如果我在运行后在代码上放置断点,则断点永远不会触发。但是,如果在启动程序之前放置了断点,则会触发断点。
但在某些情况下,断点触发会导致奇怪的错误(如果在断点上暂停并恢复)。
我说的下一个例外情况:
第一个例外是非常罕见的。可以在代码的任何地方提出并且不可重复。第二个例外我最近第一次评论。这在我的代码中是可重复的。我放置断点的函数是异步任务 ( asyncio.Task
) 中的函数。我不能从头开始重复。但我认为异常的类型(未知操作码???O_O)应该让你思考。除了!如果我更改代码,异常就会消失:例如,我添加了该a = 0
行。之后未引发异常。删除a = 0
将再次返回此异常。
这是一种深奥的错误吗?
我认为 PyCharm 调试器与 asnycio 冲突。或者我做错了什么?
未知操作码可以是函数中放置断点的任何代码行。在代码中的特定位置重复。
我打开stddef.h
并看到了这个:
#if defined _MSC_VER && !defined _CRT_USE_BUILTIN_OFFSETOF
#ifdef __cplusplus
#define offsetof(s,m) ((size_t)&reinterpret_cast<char const volatile&>((((s*)0)->m)))
#else
#define offsetof(s,m) ((size_t)&(((s*)0)->m))
#endif
#else
#define offsetof(s,m) __builtin_offsetof(s,m)
#endif
Run Code Online (Sandbox Code Playgroud)
在__cplusplus
(在C++编译器的情况下)的分支中有非常奇怪的实现,我认为它是多余的.其他分支(C编译器的情况)具有更简单的字段偏移计算.我测试了它,它的工作原理.对于在第一种情况下使用这种奇怪的强制转换和类型限定符的内容?
Json结构是C++类似结构(结构或sturcts数组,数组和基本类型).我需要将JSON对象转换为具有指定属性的指定QObject(通过QObject字段).
例如,json:
{
"name": "Andrew",
"age" 33,
"identifiers": [32, 45, 67, 78],
"more": {
"gps": "44.9064', W073° 59.0735'",
"valid": true
}
}
Run Code Online (Sandbox Code Playgroud)
的QObject:
class FMoreInfo : public QObject {
Q_OBJECT
Q_PROPERTY( QString gps );
Q_PROPERTY( bool valid );
}
class FPersonInfo : public QObject {
Q_OBJECT
Q_PROPERTY( QString name );
Q_PROPERTY( int32 age );
Q_PROPERTY( QVector<int32> identifiers );
Q_PROPERTY( FMoreInfo more );
}
Run Code Online (Sandbox Code Playgroud)
JSON是一个字符串,我需要通过一个模板函数将其转换为FPersonInfo.有没有已知的算法?
当我在Python类中修饰绑定方法时,我需要在外部类的装饰器中获取一些信息.那可能吗?
例如:
def modifier(func):
import sys
cls_namespace = sys._getframe(1).f_locals
cls_namespace['data'] # dictonary has no key 'data'
...
return func
class Parent:
data = "Hi!"
class Child(Parent):
@modifier
def method(self):
pass
Run Code Online (Sandbox Code Playgroud)
这cls_namespace
只是当前类的不完整的命名空间,没有data
我需要的字段.
有没有办法在装饰器中获得它?
有一个可以运行挂起功能的协程块.
但是我invoke
通过反射来调用函数.这是java风格的调用,显然简单的调用是行不通的.有没有办法异步运行反射方法?如何等待这种方法?
import kotlin.coroutines.experimental.*
class TestClass(val InString: String) {
suspend fun printString() {
println(InString)
}
}
fun launch(context: CoroutineContext, block: suspend () -> Unit) =
block.startCoroutine(StandaloneCoroutine(context))
private class StandaloneCoroutine(override val context: CoroutineContext): Continuation<Unit> {
override fun resume(value: Unit) {}
override fun resumeWithException(exception: Throwable) {
val currentThread = Thread.currentThread()
currentThread.uncaughtExceptionHandler.uncaughtException(currentThread, exception)
}
}
fun main(args: Array<String>) {
launch(EmptyCoroutineContext) {
val a = TestClass("TestString");
for (method in a.javaClass.methods) {
if (method.name == "printString")
method.invoke(a) // Exception in thread "main" java.lang.IllegalArgumentException: …
Run Code Online (Sandbox Code Playgroud) 我正在使用 PyQt4。我可以最小化和最大化窗口,但无法通过单击任务栏图标来最小化它。
该程序由py2exe编译并在任务栏中显示为“python.exe”。如何捕捉点击事件?
我正在使用 QWebView。该事件QWebView.event(e)
没有帮助。
下一个代码提供窗口状态更改的事件:
...
class LauncherView(QWebView, object):
def __init__(self, QWidget_parent=None):
super(LauncherView, self).__init__(QWidget_parent)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.resize(801, 601)
...
def event(self, e):
if e.type() == e.WindowStateChange and self.windowState() & QtCore.Qt.WindowMinimized: # Event if I click the minimize button
self.showMinimized()
elif e.type() == e.WindowStateChange and self.windowState() == QtCore.Qt.WindowNoState: # Event if I restore the window by clicking on taskbar
self.showMaximized() # or showNormal
elif ???????: # What event I must catch if I want to minimize window by …
Run Code Online (Sandbox Code Playgroud) python ×7
c++ ×5
async-await ×3
asynchronous ×2
breakpoints ×2
debugging ×2
decorator ×2
macros ×2
pycharm ×2
reflection ×2
break ×1
c ×1
class ×1
click ×1
coroutine ×1
function ×1
java ×1
json ×1
kotlin ×1
offsetof ×1
performance ×1
postgresql ×1
py2exe ×1
pypy ×1
pyqt ×1
qt ×1
quotes ×1
taskbar ×1
transactions ×1