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

C++ Templates: Type parameter to check validation

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

所以我的问题是,这是检查验证的好方法还是我应该使用其他方法来验证?

我希望我不会太含糊 - 如果我需要详细说明,请随意询问。谢谢!

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

我认为在复杂的情况下命名它可以更好地理解,因此断言看起来更具可读性,但您可以保留名称而不在 class 中使用它。也可以将模板检查拆分为更小的命名单元。

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

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

尽管如此,我认真考虑仅模板解决方案的一个原因是它似乎与 constraints and concepts 在未来更兼容,尽管这是对未来的赌注。