0

MACRO を使用して文字列を動的に作成したい。たとえば、int i が 1:n の範囲にあり、文字列 "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)
4

2 に答える 2

1

コンパイル時に文字列リテラル「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]
于 2012-12-20T09:20:03.723 に答える
0

このようにすることができます..つまり、マクロ自体で、目的の文字列を表示する必要があります..

    #include<iostream>

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

    using namespace std;
    int main()
    {
    int testArray;
    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.
    CREATE_ARRAY_ELEM ("testArray",i);

    }
    return 1;
     }
于 2012-12-20T07:24:38.593 に答える