我正在实现一个涉及大量动作和参数的命令模式实现。为简化起见,我计划使用可以将所有可能的参数保存到映射中的模块的类。
isDisplayButtons
此实现的一个明显缺点是每个参数都必须从IParam接口扩展,我可以以某种方式简化它。
答案 0 :(得分:0)
如果获取后使用参数的人知道参数的类型,则可以使用c ++ 17 std::any
,或者如果必须使用c ++ 11,则可以尝试{{1} },或者如果您都不能使用boost::any
。
区别在于void *不会在强制转换为错误类型时失败,其中void*
将引发异常,如果与指针一起使用,则返回nullptr。您还需要在std :: shared_ptr中使用自定义删除器,以便能够释放void *。