什么是 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的设计目的在于让状态控制更自然。您无需理解其实现,只需按普通变量的方式使用它即可。
Yumo-sama