gpt4 book ai didi

c++ - 如何在函数参数中强制类型并避免隐式转换?

转载 作者:行者123 更新时间:2023-12-03 10:05:18 24 4
gpt4 key购买 nike

我有一个功能

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);
在这篇文章中 How do I avoid implicit conversions on non-constructing functions?它们完全消除了某些类型的使用,但事实并非如此。
谢谢。

最佳答案

在 C++20 中,它会像这样简单:

template<typename T>
static inline bool Contains(T container, std::same_as<typename T::value_type> auto const& value)
{
return std::find(container.begin(), container.end(), value) != container.end();
}
在此代码中 std::same_as是一个概念,可以与简洁的模板语法一起使用。
这种解决方案的一个优点是编译器错误发生在调用站点,告诉用户参数的类型是错误的。

关于c++ - 如何在函数参数中强制类型并避免隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65939314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com