作者loveflames (咕啾咕啾魔法陣)
看板C_and_CPP
標題Re: [問題] 巨集中是否能對變數做前處理?
時間Thu May 27 02:30:34 2010
#include <iostream>
using namespace std;
#define max 6
#define a(b) A(b)
#define A(b) a##b
int m[10];
int a1=11,a2=12,a3=13,a4=14,a5=15,a6=16;
template<int n>
struct test
{
static void p(){
test<n-1>::p();
m[n]=*(&a(max)-(max-n));//這行執行時的結果可能會出錯
}
};
template<>
struct test<1>
{
static void p(){
m[1]=a1;
}
};
int main() {
test<max>::p();
for(int i=1;i<=max;i++)
cout<<"m["<<i<<"]="<<m[i]<<endl;
return 0;
}
-----------------------------
因為不知怎麼用template來產生a1~an這些名字
所以只好這樣寫
可是開最佳化後global變數就不是照順序放
紅色那行可能會有問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.134.226.149
→ loveme00835:模板不算是前處理吧? 05/27 04:00
→ loveflames:原文說編譯時就將變數代入,應該有符合需求吧?? 05/27 12:04
→ loveflames:17926的方法應該能做到,但是這樣不如直接寫m[1]=a1 ~ 05/27 12:08
→ loveflames:m[n]=an 05/27 12:08