C ++模板:键入参数以检查验证

问题描述 投票:0回答:1
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,基于给定的typename(通过模板特化识别)。

注意:convert_debug_policies是一个命名空间。

这段代码编译。但是,我想知道typename validation是否被认为是好的或稍微尴尬。我可以想象它很尴尬因为类型实际上只用于静态断言;除了在任务期间,它不被使用。或许似乎最好保持typename验证无名,但我实际上想要使用它,以便程序员确实知道它究竟是什么;特别是如果给出了另一个调试策略(在命名空间中)。

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

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

c++11 templates static-assert
1个回答
1
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.