在函数参数中避免 std::enable_if
在函数参数中使用 std::enable_if 会带来复杂性,并使代码难以阅读。它还使模板参数推导变得复杂,并可能导致意外的行为。
解决方案:为每个所需的行为定义重载函数,使用 sfinae 选择适当的函数。
std::enable_if 作为模板参数
优先选择 std::enable_if 作为模板参数有几个优点:
std::enable_if 作为返回类型
虽然使用 std::enable_if 作为返回类型在技术上是可行的,但由于以下原因,它并不理想:
成员函数模板和非成员函数模板的差异
相同的原则适用于成员函数模板和非成员函数模板。但是,成员函数模板可能有其他考虑因素,例如私有或受保护成员的可访问性。
建议
遵循“将 hack 放入模板中”的指南参数。”通过将 std::enable_if 放在模板参数上,可以增强可读性,确保通用适用性,并简化模板参数推导。
以上是为什么我应该避免在函数签名中使用“std::enable_if”?的详细内容。更多信息请关注PHP中文网其他相关文章!