gpt4 book ai didi

c++ - 使用函数中的语句数作为常量进行内存分配

转载 作者:行者123 更新时间:2023-11-30 03:16:21 25 4
gpt4 key购买 nike

我有一个执行一系列测试的函数。每当创建新测试时,该函数都会多一两行。并且 - 结果被推回到一个数组中。所以它是这样的(简化):

void foo(int *results) {
auto index { 0 };

results[i++] = test_1(some, args, here);
results[i++] = test_1(some, other_args, here);

results[i++] = test_2(some, args, here);

results[i++] = test_3(some, args, here);

// etc. etc.
}

void bar() {
auto results = new int/* magic */];
foo(results);
}

我想用这个函数中的语句数来为结果分配空间(bar()中的那一行)。我不能使用动态重新分配的结构,如 std::vector 或列表等 - 因为由于硬件限制,我无法分配任何内存。

现在,我可以手动计算行数 - 这会奏效。但是每当我添加另一个测试时,我都必须记住更新魔法常量。

有没有什么方法可以用可用于“魔术”表达式的结果进行计数?

注:既然我是一个没有尊严的谨小慎微的人,我愿意屈服于使用宏。

最佳答案

说到宏黑客:

#include <iostream>

#define ADD_TEST(X) do { results[i++] = (X); (void)__COUNTER__; } while (0)

const int foo_start = __COUNTER__;
void foo(int *results) {
int i = 0;
ADD_TEST(100);
ADD_TEST(200);
ADD_TEST(300);
}
const int foo_end = __COUNTER__;

int main() {
int results[foo_end - foo_start - 1];
foo(results);
for (int i : results) {
std::cout << i << '\n';
}
}

它有点糟糕,__COUNTER__ 是 GCC 和其他编译器中的非标准扩展,但是嘿,it works .

优点是它没有使用任何花哨的 C++ 特性,所以原则上它应该与旧的编译器甚至 C 兼容。

关于c++ - 使用函数中的语句数作为常量进行内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405496/

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