【问题标题】:template method pattern and long parameter lists in c++C++中的模板方法模式和长参数列表
【发布时间】:2010-09-09 20:54:23
【问题描述】:

在对我的last question 提供有用的答案后,我开始为具有许多不同选项的类使用模板方法模式。在没有全部实现它们的情况下,我当前对该类对象的声明现在看起来像这样:

pc < prg, tc, 9, 0, 4, 4, test, true, true, true, true, false, true, true, 10, 0, -1, 3, 3 > mp;

您如何处理长模板参数列表?我应该使用枚举/定义而不是真/假和数字吗?有没有常用的替代品?

【问题讨论】:

  • 拆分班级,可能做得太多了。

标签: c++ templates template-method-pattern


【解决方案1】:

如果我有一个那么长的模板参数列表,我宁愿重新考虑我的设计。许多参数通常表明设计不佳。

【讨论】:

    【解决方案2】:

    是的,使用枚举(不是定义)而不是真/假。那样的话,如果你把参数弄乱了,编译器就会报错。此外,它对读者来说更清楚。

    至于处理一般的长参数列表 --- 将它们隐藏在 typedef 或修复某些模板参数的生成器后面,并让您改变其他参数。

    【讨论】:

    • 我猜你所说的“生成器”是指template &lt; someparams &gt; struct simple_pc { typedef pc &lt; long list with some fixed values &gt; T; };?听起来不错。
    【解决方案3】:

    我不做 c++,这可能不适用于模板,但我会尝试使用具有长参数列表的普通方法来查找相关参数并尝试将它们合理分组并引入反映参数对象分组,以便您拥有更复杂参数的更短列表。

    【讨论】:

    • 我花了一段时间才意识到这个建议也适用于我的模板场景并带来了一个好的设计:定义一些接受一些参数的子类型(根据模板创建的那些方法模式)并让原始类只将子类型作为参数并从它们继承。
    • @Thomas:很高兴听到它在这种情况下很有用。有一天,我将不得不复习我的 C++ 并研究它。
    【解决方案4】:

    我会评估一个参数,它是一个变体类型的集合,例如 std::vector。

    【讨论】:

    • 我没有这样做,因为我需要对模板参数常量进行编译器优化,而不是在运行时评估集合的元素。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2011-12-30
    • 2016-04-24
    相关资源
    最近更新 更多