C ++模板:类型参数以检查验证

时间:2018-09-17 21:52:24

标签: c++11 templates static-assert

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是否可以接受还是有点尴尬。我可以想象它很尴尬,因为该类型实际上仅用于静态断言。除在分配期间外,不使用它。保持类型名称验证不命名似乎更可取,但是我实际上想使用它,以便程序员实际上确实知道它是什么。尤其是如果给出了另一个调试策略(在名称空间中)。

所以我的问题是,这是检查验证的好方法还是应该使用另一种验证方法?

我希望我不太模糊-随时问我是否需要详细说明。谢谢!

1 个答案:

答案 0 :(得分:1)

我想,如果您只能在静态断言中使用它,那么所有内容都是constexpr,您实际上可以对模板参数进行SFINAE样式检查。

我认为,在复杂的情况下命名会更好地理解,因此断言似乎更易读,但是您可以保留名称而不在类中使用它。也可以将模板检查分成较小的命名单元。

您的用例听起来不像是断言或验证,而是检查类型是否满足某些需求。

静态断言也用于实现需求,并提供一条错误消息,我认为这很重要。 An example from cppreference.。所以这主要是设计决定。

尽管如此,我会认真考虑仅使用模板的解决方案的一个原因是,尽管它押注了未来,但它似乎与constraints and concepts更加兼容。