如何在函数参数中强制执行类型并避免隐式转换?

乔波尔

我有一个功能

template<typename T>
static inline bool Contains(T container, const typename T::value_type& value)
{
    return std::find(container.begin(), container.end(), value) != container.end();
}

有没有禁止此功能隐式转换的选项?

此代码应无法编译:

std::vector<int> vec = {1, 2, 3};
Contains(vec, -5.2);

在这篇文章中,如何避免在非构造函数上进行隐式转换?它们完全删除了某些类型的使用,事实并非如此。

谢谢。

弗洛雷斯

您可以在函数中添加第二个模板参数和static_assert,以确保第二个参数与容器的值类型完全相同。

template<typename T, typename U>
static inline bool Contains(const T& container, const U& value)
{   
    static_assert(std::is_same_v<typename T::value_type, U>, "NO IMPLICIT CONVERSION ALLOWED");
    return std::find(container.begin(), container.end(), value) != container.end();
}

int main() {
    std::vector<int> vec = {1, 2, 3};
    Contains(vec, -5.2);  // Fails now
}

完整的例子在这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为GHCI强制执行类型构造函数参数

根据参数中的属性强制执行函数的返回类型

我们如何在PHP中强制执行参数类型?

如何在打字稿中的类方法上强制执行函数类型接口?

如何在 blazor 组件中强制执行参数?

如何在Jenkins DSL中强制执行参数排序?

如何在ExcelDataReader中强制执行无类型的列?

如何在函数调用中强制执行序列

如何在Java中强制执行构造函数

如何为参数中的隐式类型转换定义构造函数?

如何在成员函数中使用隐式类型转换?

如何使用类型强制执行特定的参数对?

如何在 Scala 中定义带有类型参数的隐式函数?

在Scala中,如何避免强制转换函数参数?

如何通过其实现的接口在具体类中强制执行类型构造函数?

如何在python列表上强制执行特定类型

Python中的枚举:如何在方法参数中强制执行

根据函数的参数化类型对函数强制执行参数和返回类型限制

如何在Python类函数中隐式传递参数

如何在匿名函数中隐式设置多个参数?

如何在打字稿中强制执行功能类型

如何在PHP中强制执行类型提示接口协定

未强制执行函数返回类型

有没有办法在函数模板参数推导中强制隐式转换?

如何防止构造函数在C ++中强制转换参数类型?

如何在 Antlr 中强制执行某些规则

如何在Eclipse中强制执行线程转储?

如何在vscode扩展CompletionItems中强制执行顺序

如何在 Java <= 8 中强制执行模块边界