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

我有一个功能

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);

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

谢谢。

回答

在 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有一个概念,可以与简洁的模板语法一起使用。

这种解决方案的一个优点是编译器错误发生在调用站点,告诉用户参数的类型是错误的。


以上是如何在函数参数中强制类型并避免隐式转换?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>