C++ 音视频工具命令行骨架:参数解析与任务回调系统
一、为什么需要这个框架?
你可能用过 ffmpeg、handbrake-cli 这类命令行音视频工具,它们支持这样的命令:
./mytool --input video.mp4 --output out.mp4 transcode
背后其实有两件事要做:
- 解析命令行参数(比如识别
--input和它的值) - 根据任务名(如
transcode)
如果每次加新功能都硬编码 if-else,代码会越来越乱。 所以,我们需要一个可扩展的命令分发系统——这正是本文要实现的。
二、整体设计思路
我们用两个核心机制:
| 机制 | 作用 |
|---|---|
| 参数回调注册 | 告诉程序'看到 --input 就调这个函数' |
| 任务回调注册 | 告诉程序'看到 transcode 就执行转码逻辑' |
底层靠两个 std::map 实现:
map<string, function>存参数处理器map<string, function>存任务处理器
核心优势:新增参数或任务,只需注册一行代码,无需修改解析逻辑。
三、完整可运行代码(三个文件)
文件 1:UserInput.h —— 接口声明
#ifndef USER_INPUT_H
#define USER_INPUT_H
#include <string>
#include <vector>
#include <map>
#include <functional>
#include <iostream>
{
:
ParaCall = std::function<( std::string&)>;
ParaVec = std::vector<std::string>&;
std::map<std::string, ParaCall> para_keys_;
std::map<std::string, std::function<(ParaVec)>> main_tasks_;
;
;
};

