C++ 如何使用std函数为Qt中的回调注册单例qml类型?

C++ 如何使用std函数为Qt中的回调注册单例qml类型?,c++,qt,plugins,types,qml,C++,Qt,Plugins,Types,Qml,有没有一种方法可以使用自定义std函数为回调注册单例qml类型?如果没有,是否有特殊原因不允许? 在Qt文档中,我只能找到接受函数指针的qmlRegisterSingletonType 谢谢 如果没有,是否有特殊原因不允许 因为它影响了Qt的二进制兼容性承诺。在开发邮件列表上解释了这一点: 嗨 我理解关于使用的限制(说得委婉一点) 由于QT API本身的不可操作性,API从C++标准库中派生出来 扩展我们的二进制兼容性承诺。不过我很好奇 std::功能属于同一个范畴 是的,它是:二进制表示(包括

有没有一种方法可以使用自定义std函数为回调注册单例qml类型?如果没有,是否有特殊原因不允许? 在Qt文档中,我只能找到接受函数指针的qmlRegisterSingletonType

谢谢

如果没有,是否有特殊原因不允许

因为它影响了Qt的二进制兼容性承诺。在开发邮件列表上解释了这一点:

我理解关于使用的限制(说得委婉一点) 由于QT API本身的不可操作性,API从C++标准库中派生出来 扩展我们的二进制兼容性承诺。不过我很好奇 std::功能属于同一个范畴

是的,它是:二进制表示(包括大小),或者 不能保证stdlib中的损坏是相同的 实现

因此,以下是选择:

1-重新实现QFunction,语义与std::function相似

2-解除我们不能在ABI中使用stdlib的限制

3-当我们需要回调时,什么也不做,继续使用笨拙的界面

#和往常一样,第三种情况更容易(维持现状),而且很可能会发生#1是一项有点困难的任务,但没有那么难。我们就这样结束了 使用std::function的糟糕副本#2号总是被解雇 过去,但我认为应该认真考虑

(这同样适用于std::unique\u ptr)

我知道我们允许在特定于Windows的API中使用std::函数 QProcess的,可能不同,也可能不同。但是我很好奇 这是在API的上下文中实现的,该API旨在完全跨平台

实际上,这违反了政策。即使在窗户上,也有 不同的std-lib实现


@Jesper那么你建议他不要使用cin、cout cerr和clog?@Jesper根据我的理解,Singleton qml类型注册只意味着以特定名称注册的同一实例将在所有qml中使用,但这并不能阻止我创建同一C++类的多个实例,只要它们是用不同的名字注册的,我是不是?“Neil Butterworth,你是说全局是一个好主意?”JeS珀有时候是一个明智的解决特定问题的方法。没有什么是一个“伟大的想法”的所有时间。@NeilButterworth我宁愿区分全球和单身,但再次这与我的问题无关