我有一个功能
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] 删除。
我来说两句