template <
typename input_currency_type, typename output_currency_type,
typename validation = convert_debug_policies::fast_validity_currency_type<input_currency_type>
>
fast_validity_currency_type<typename>
代表基于给定类型名(可通过模板专门化识别)的许多static_assertions。
注意:convert_debug_policies
是一个名称空间。
此代码进行编译。但是,我想知道typename validation
是否可以接受还是有点尴尬。我可以想象它很尴尬,因为该类型实际上仅用于静态断言。除在分配期间外,不使用它。保持类型名称验证不命名似乎更可取,但是我实际上想使用它,以便程序员实际上确实知道它是什么。尤其是如果给出了另一个调试策略(在名称空间中)。
所以我的问题是,这是检查验证的好方法还是应该使用另一种验证方法?
我希望我不太模糊-随时问我是否需要详细说明。谢谢!
答案 0 :(得分:1)
我想,如果您只能在静态断言中使用它,那么所有内容都是constexpr,您实际上可以对模板参数进行SFINAE样式检查。
我认为,在复杂的情况下命名会更好地理解,因此断言似乎更易读,但是您可以保留名称而不在类中使用它。也可以将模板检查分成较小的命名单元。
您的用例听起来不像是断言或验证,而是检查类型是否满足某些需求。
静态断言也用于实现需求,并提供一条错误消息,我认为这很重要。 An example from cppreference.。所以这主要是设计决定。
尽管如此,我会认真考虑仅使用模板的解决方案的一个原因是,尽管它押注了未来,但它似乎与constraints and concepts更加兼容。