gpt4 book ai didi

c++ - 从没有 Qt、STL 或 Boost 的 C++98 接口(interface)连接 Qt 槽和信号

转载 作者:行者123 更新时间:2023-11-28 05:02:18 26 4
gpt4 key购买 nike

我正在编写一个音频渲染库,它将作为输入音频缓冲区,执行一些操作,然后管理选定设备上的播放。对于这个任务,我决定使用 Qt 的 QAudioOutput 类。

我想允许用户在 QAudioOutput 对象的状态发生变化(事件、暂停、停止和空闲)时设置回调。我会将这些信号连接到将调用用户定义的回调的信号处理程序。但是,我有以下限制:库头上没有 STL、Qt、Boost。我还需要与 C++98 保持兼容。

现在,我有 2 个解决方案(有缺点),我正在寻求改进设计。我的第一个解决方案是:

// library header
class AudioLibrary
{
typedef void ( *Callback )();
void setOnActiveCallback( Callback cb );
};

此解决方案的问题是客户端只能传递静态函数或非捕获 lambda。这限制太多了。想象一下,一个客户想要做一些简单的事情,比如在播放结束后重新启用一个按钮。如果按钮是成员变量,则不可能。

我的第二个解决方案是我的接口(interface)将是一个抽象类并包含纯虚函数,这些函数将包含状态更改时所需的行为。但是,我不确定这对图书馆的客户来说是否会很有趣...

有没有我忘记想到的更清洁和/或更好的解决方案?

最佳答案

这听起来像是 C 风格的回调。

class AudioLibrary
{
typedef void ( *Callback )( void * );
void setOnActiveCallback( Callback cb, void * context );

// Perhaps also include
template <typename Func>
void setOnActiveCallback( Func & f )
{
setOnActiveCallback( &Func::operator(), &f );
}
};

关于c++ - 从没有 Qt、STL 或 Boost 的 C++98 接口(interface)连接 Qt 槽和信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com