根据模板值确定的静态数组大小
Static array size determined from template values
我正在尝试使用静态数组,其大小需要由给定的模板值确定。但是,大小在整个程序运行时将是恒定的 - 这就是我决定不使用std::vector
的原因。
template<uint32_t BAR_WIDTH>
class Bar
{
//do_stuff...
Foo mapper[ [&]()->int{ uint32_t tmp = BAR_WIDTH / Foo:FOO_EDGE; return (BAR_WIDTH % 10 == 0) ? tmp : tmp + 1; }; ];
};
FOO_EGDE
是常量静态值。IDE给了我一个提示
数组大小表达式必须具有整数类型而不是 int(*(((
我想知道我是否可以在不使用std::vector
的情况下让它以这种方式工作.欢迎和赞赏任何建议。
问题是,您正在使用 lambda 来确定数组的大小。如果您将其关闭并仅使用三元运算符,则可以:
int main() {
const bool z = true;
const int x = 5, y = 3;
int arr[z ? x : y];
return 0;
}
艾德酮
与以下相反:
int main() {
const bool z = true;
const int x = 5, y = 3;
int arr[[&]() -> int { return z ? x : y; }];
return 0;
}
艾德酮
如此处所述,lambda 表达式还不能constexpr
,您只能声明具有constexpr
值的数组的大小(即使这样,您也不会尝试调用声明的 lambda(调用它 - 声明结束时需要()
(。
若要解决此问题,可以使用私有静态constexpr
方法,并将其返回值用于数组大小声明:
static constexpr uint32_t GetArraySize ()
{
uint32_t tmp = BAR_WIDTH / Foo::FOO_EDGE;
return (BAR_WIDTH % 10 == 0) ? tmp : tmp + 1;
}
Foo mapper[GetArraySize ()];
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 动态分配的数组和静态数组之间的区别
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 使用 lambda 初始化静态数组
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 根据模板值确定的静态数组大小
- 如何使用 PHP-CPP 在 PHP 类中添加静态数组
- 包含不同大小静态数组的类的多个实例
- 从我的对象返回静态数组
- 如何避免在类中显式指定静态数组的大小
- 编译类型的时静态数组
- 来自函数参数的 C++ 静态数组声明