小编Art*_*nov的帖子

类似Python的C++装饰器

有没有办法在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)

可能吗?

c++ python macros function decorator

28
推荐指数
2
解决办法
8810
查看次数

所有C++编译器都支持async/await关键字吗?

我想async/await在C++(UE4框架)中使用语法,但由于跨平台代码,我不确定是否可能......或者可能?如果是,我该如何使用它?

也有await__await(resumable,yield__yield_value也)在Visual Studio中突出显示的关键字.有什么区别?也许不是所有的编译器都支持这个关键字或单独支持?

gcc,clang是接受吗?或者不接受,我可以单独为每个平台使用宏.

c++ asynchronous cross-platform async-await unreal-engine4

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

PyPy可以与asyncio一起使用吗?

PyPy是否支持aio和Python 3.5?

我需要性能PyPy和异步代码asyncio.我还需要async/await在我的代码中使用.那可能吗?

如果是这样,有什么细微差别?

python performance asynchronous pypy python-asyncio

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

在 C++ 中取消引用 __FUNCTION__ 宏

是否可以取消__FUNCTION__引用宏?我需要从其他对象调用同名函数:

this->__FUNCTION__(params)
Run Code Online (Sandbox Code Playgroud)

但是 function 给出了带引号的函数名称...

c++ quotes macros c-preprocessor

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

如何使用 asyncio 和 postgres 在 python 中进行事务处理?

我的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)

python postgresql transactions async-await python-asyncio

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

python中是否有break函数(对于PyCharm或其他IDE)?

__debugbreakC++中有函数。

我需要在我的 Python 代码(使用 PyCharm IDE)中使用类似的函数来中断运行时并恢复可能性。

python debugging breakpoints break pycharm

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

在 PyCharm 中调试 asyncio 代码会导致绝对疯狂的不可重复错误

在我基于使用 PyCharm 调试器调试的 asyncio 和 asyncio tcp 连接的项目中,我遇到了非常非常荒谬的错误。

如果我在运行后在代码上放置断点,则断点永远不会触发。但是,如果在启动程序之前放置了断点,则会触发断点。

但在某些情况下,断点触发会导致奇怪的错误(如果在断点上暂停并恢复)。

我说的下一个例外情况:

  1. 类型错误:“协程”对象不可调用
  2. 系统错误:未知操作码

第一个例外是非常罕见的。可以在代码的任何地方提出并且不可重复。第二个例外我最近第一次评论。这在我的代码中是可重复的。我放置断点的函数是异步任务 ( asyncio.Task) 中的函数。我不能从头开始重复。但我认为异常的类型(未知操作码???O_O)应该让你思考。除了!如果我更改代码,异常就会消失:例如,我添加了该a = 0行。之后未引发异常。删除a = 0将再次返回此异常。

这是一种深奥的错误吗?

我认为 PyCharm 调试器与 asnycio 冲突。或者我做错了什么?


未知操作码可以是函数中放置断点的任何代码行。在代码中的特定位置重复。 未知操作码


这个异常也可以在行内,也可以在另一个函数内。非常罕见且不可复制 在此处输入图片说明

python debugging breakpoints pycharm python-asyncio

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

为什么偏移实现在C和C++上奇怪地不同?

我打开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编译器的情况)具有更简单的字段偏移计算.我测试了它,它的工作原理.对于在第一种情况下使用这种奇怪的强制转换和类型限定符的内容?

c c++ offsetof

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

如何将json对象转换为QObject?

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.有没有已知的算法?

c++ reflection serialization qt json

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

装饰器上的装饰器可以访问类及其祖先

当我在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我需要的字段.

有没有办法在装饰器中获得它?

python reflection class decorator python-decorators

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

如何通过反射运行挂起方法?

有一个可以运行挂起功能的协程块.

但是我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)

java coroutine async-await kotlin kotlin-coroutines

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

如何检测任务栏上的点击?

我正在使用 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 taskbar pyqt click py2exe

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