c++ - 使用 MACRO 在 for 循环中动态创建字符串(例如数组索引)

标签 c++ macros

我想使用 MACRO 动态创建字符串。例如如果我有 1:n 范围内的 int i 和字符串“testArray”。我应该能够创建 testArray[0],testArray[1], ... testarray[n-1] 如果可能,请告诉我。

下面是示例代码:

void fun2(int x,std::string name)
{
/*do something*/
}

void fun1()
{

  for (unsigned int i = 0 ;i < 5 ; ++i )
    {
        // I want to create a MACRO such that it create "testArray[0]","testArray[1]",..."testArray[4]" etc.
        fun2(x,CREATE_ARRAY_ELEM ("testArray",i));
    }
 }

我在下面尝试过,但它不起作用:

#define STR1(x) #x
#define CREATE_INDEX(paramName,elementIndex) #paramName << "[" << elementIndex << "]"
#define CREATE_ARRAY_ELEM(paramName,elementIndex) CREATE_INDEX(paramName,elementIndex)
#define STRINGIZE_1(x) STR1(x)

最佳答案

您似乎想要在编译时创建字符串文字“testArray[0]”、“testArray[1]”等。那不会发生。您可以使用 ostringstream运行时 轻松完成此操作,但我认为这不是您要找的东西。

如果它是您要找的,那么...

#include <iostream>
#include <sstream>
using namespace std;

static std::string array_str(const char* s, unsigned int i)
{
    std::ostringstream oss;
    oss << s << '[' << i << ']';
    return oss.str();
}

void fun2(int x, const std::string& name)
{
    std::cout << x << ':' << name << std::endl;
}

void fun1()
{
    for (unsigned int i = 0 ;i < 5 ; ++i )
    {
        fun2(i, array_str("testArray", i));
    }
}

测试输出

0:testArray[0]
1:testArray[1]
2:testArray[2]
3:testArray[3]
4:testArray[4]

关于c++ - 使用 MACRO 在 for 循环中动态创建字符串(例如数组索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13966600/

相关文章:

c++ - 如何从 C++ 程序内部测量内存使用情况?

c++ - constexpr 静态模板函数 : g++ error is a warning on clang

objective-c - 宏和 ARC 的奇怪问题

macros - Racket:由定义为macroname.0的宏生成的宏

macros - 如何编写函数(或宏)来创建 Vec 和对它的引用?

c++ - 如何将 float 转换为 int 保留位值

c++ - 使用 std::string.compare() 不起作用

c++ - 如何从模板中的对象 vector 上获取迭代器?

macros - 宏是否可以将标识符变为小写?

c - 数字常量之前的预期说明符限定符列表