小编Ser*_*hiy的帖子

QJSEngine删除我的QObject,如何在QJSEngine :: newQObject之后更改所有权?

尝试使用子类化的QObject作为参数执行小型脚本。

QJSEngine jsEngine;
QJSValue arg = jsEngine.newQObject(child); // Child it's subclassed QObject
QJSValue function = jsEngine.evaluate(m_childRestriction);

QJSValue result = function.call(QJSValueList() << arg);
Run Code Online (Sandbox Code Playgroud)

在销毁jsEngine时,它将为我的子对象调用delete(因为newQObject使用JavaScriptOwnership创建了它)。如何避免这种情况,如何更改arg的所有权?

脚本很简单:

function(device) { 
    return device.m_place >=0 && device.m_place < 16; 
}
Run Code Online (Sandbox Code Playgroud)

UPD: 可以调用QQmlEngine::setObjectOwnership(child, QQmlEngine::CppOwnership);对象,因为它是静态函数。从帮助中还不清楚。认为也应该在QJSEngine

c++ qt qjsengine

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

将表转换为自定义类型数组

将一个列表转换为单维数组很容易;

my_array integer[];
my_array := ARRAY(SELECT * FROM single_column_table);
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,我需要将具有多个列的表转换为自定义类型对象的数组;

所以我有自定义类型

TYPE dbfile AS
   (fileid integer,
    deleted boolean,
    name text,
    parentid integer,
    ...
ALTER TYPE dbfile
Run Code Online (Sandbox Code Playgroud)

和数组声明为

my_files dbfile[];

-- how to cast table to array of custom types???
my_files := SELECT * FROM get_files();  -- get_files return SETOF dbfile.
Run Code Online (Sandbox Code Playgroud)

如何将表转换为自定义类型数组?

ARRAY()不起作用,因为它需要单列.

postgresql plpgsql

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

胖 std::function 的瘦替代

我正在尝试将对象打包为 64 字节(本地属性),并且需要保存 getter 和 setter 成员函数。

我真的很喜欢 std::function 但太大了:

sizeof(std::function<int(void)>)给出 40 个字节(VS2017,x64)。

我想弄清楚是否有任何std::function16 字节大且内部没有额外分配的精简版本?

更新:解决方案如下所示,两个成员函数需要 16 个字节 (x64)。成员函数指针变成了模板参数,因此它们什么也不拿,只存储对象指针和 vptr。

感谢@Yak。

class Property
{
public:
    virtual ~Property() {}

    virtual QVariant value() const = 0;
    virtual void setValue(const QVariant& value) = 0;
};

template<typename TYPE,
         typename CLASS,
         TYPE(CLASS::*get)() const,
         void(CLASS::*set)(const TYPE &)>
class PropertyValue : public Property
{
public:
    PropertyValueGet() = delete;
    PropertyValueGet(PropertyValueGet const& ) = delete;
    PropertyValueGet& operator=(PropertyValueGet const& ) = delete;

    PropertyValueGet(CLASS* object) : m_object(object) …
Run Code Online (Sandbox Code Playgroud)

c++ function c++11

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

标签 统计

c++ ×2

c++11 ×1

function ×1

plpgsql ×1

postgresql ×1

qjsengine ×1

qt ×1