作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想定义一个简单的模板函数,它接受一个运行时值并确定它是否是某些可能值集的成员。
用法:
int x; // <- pretend this came from elsewhere...
if (isoneof(x, {5,3,9,25}) ...
类似:
template <typename T, size_t size>
bool isoneof(T value, T (&arr)[size])
{
for (size_t i = 0; i < size; ++i)
if (value == arr[i])
return true;
return false;
}
我认为这注定要失败,因为我不明白如何创建一个内联静态数组。
我可以使用:
int kPossibilities[] = {5,3,9,25};
if (isoneodf(6, kPossibilities)) ...
对 isoneof 稍作改动:
template <typename T1, typename T2, size_t size>
bool isoneof(T1 value, const T2 (&arr)[size])
{
for (size_t i = 0; i < size; ++i)
if (value == arr[i])
return true;
return false;
}
这也使它更加灵活。
有人可以改进吗?定义“内联静态值集”的更好方法?
最佳答案
如果您喜欢这样的东西,那么您将成为 Boost.Assign 的非常高兴的用户.
Boost.Assign 实际上证明了这种语义是可能的,但是看一下 assign 的来源就会让你相信你不想自己这样做:)
但是,您将能够创建这样的东西:
if (isoneof(x, list_of(2)(3)(5)(7)(11)) { ...
... 缺点是您必须使用 boost::array
作为参数而不是内置数组(感谢 Manuel)——但是,这是一个很好的时机实际开始使用它们:>
关于C++:有没有办法定义一个静态数组内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208202/
我是一名优秀的程序员,十分优秀!