gpt4 book ai didi

C++:有没有办法定义一个静态数组内联?

转载 作者:IT老高 更新时间:2023-10-28 23:13:26 24 4
gpt4 key购买 nike

我想定义一个简单的模板函数,它接受一个运行时值并确定它是否是某些可能值集的成员。

用法:

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/

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