proxy代理类

什么是 yumo::audioInstance::proxy?

proxy是audioInstance内部定义的一个模板类,用于模拟普通变量的读写行为。它的作用是让您能够像操作普通成员变量一样操作播放状态,而无需调用额外的函数

原型

template <typename T>
class proxy
{
public:
    proxy();
    proxy(T &value);
    proxy(const proxy &other);
    proxy &operator=(const proxy &other) = delete;
    operator T() const;
    proxy &operator=(T value);
};

为什么要设计成代理?

在老版本API中,控制播放状态通常需要一系列函数,例如:

setVolume(id, 0.5f);
float v = getVolume(id);
stop(id);
resume(id);

这种设计虽然清晰,但略显繁琐。而通过代理成员,您可以直接写出更自然的代码:

inst.volume = 0.5f;
float v = inst.volume;
inst.stopped = true;
inst.stopped = false;

这大大简化了状态管理,使代码更简洁、易读。

使用场景

proxy仅作为audioInstance的成员出现,你永远不应该需要直接声明或初始化一个proxy对象。您只需要通过audioInstance的成员(如position、volume、stopped等)来读写即可。

yumo::audioInstance inst = ...;
inst.volume = 0.8f;          // 赋值 -> 修改音量
float vol = inst.volume;     // 读取 -> 获取当前音量

为什么不要手动构造 proxy?

  • proxy对象内部依赖 audioInstance 提供的互斥锁和指针,手动构造会破坏内部状态。
  • 它只是一个语法糖,其本质是对底层播放引擎的调用封装。直接操作 proxy 对象本身没有意义。
  • 如果您需要在其他上下文中控制播放,请始终通过有效的audioInstance对象来操作。

结论:proxy的设计目的在于让状态控制更自然。您无需理解其实现,只需按普通变量的方式使用它即可。

最后一次修改时间:2026-08-03 17:35