我喜歡爲不同類型的對象的數量有限,檢索某些參數如下的機制我需要處理:有沒有辦法將數組行爲作爲靜態結構數據成員?
template <class T>
struct params {};
template <>
struct params<FooObj>
{
static const int paramA = 17;
static const int paramB = 29;
};
稍後簡化了我的代碼,因爲在switch語句時,我處理處理不同的對象如果我得到一個FooObj
那麼我需要做的就是這樣的事情:
typedef params<FooObj> paramsT;
,然後在該代碼段我曾訪問參數通過paramsT::paramC
或什麼是FooObj
工作。
現在我遇到了一個對象,我有這樣的事情:
template <>
struct params<BarObj>
{
static const int paramA = 0;
static const int paramB = 9;
static const int paramC = 17;
static const int paramD1 = 18;
static const int paramE1 = 20;
static const int paramD2 = 28;
static const int paramE2 = 30;
static const int paramD3 = 38;
static const int paramE3 = 40;
static const int paramD4 = 48;
static const int paramE4 = 50;
static const int paramD5 = 58;
static const int paramE5 = 60;
static const int paramD6 = 68;
static const int paramE6 = 70;
};
,當我處理這個對象我開始寫類似如下:
typedef params<BarObj> paramsT;
BarObj bar;
//load the first 3 params via the above info into bar
int a,b;
for (int i = 1; i <= 6; ++i)
{
a = doSomethingA(bla + paramsT::paramD1);
b = doSomethingB(bla + paramsT::paramE1);
bla.paramD1 = functionOf(stuff,and,a,b);
}
,但當然上面有1
硬編碼到它,它會理想地讀這樣的:
typedef params<BarObj> paramsT;
BarObj bar;
//load the first 3 params via the above info into bar
int a,b;
for (int i = 0; i < 6; ++i)
{
a = doSomethingA(bla + paramsT::paramD[i]);
b = doSomethingB(bla + paramsT::paramE[i]);
bla.paramD[i] = functionOf(stuff,and,a,b);
}
雖然像上面我需要的PARAMS模板專業化是這樣的:
template <>
struct params<BarObj>
{
static const int paramA = 0;
static const int paramB = 9;
static const int paramC = 17;
static const int paramD[] = {18, etc..};
static const int paramE[] = {20, etc..};
};
不編譯,因爲即使硬編碼的陣列非整數類型。有沒有一個簡單的補丁,希望看起來與我目前的使用情況有所不同?或者有一種方法來獲取數組內容?
爲什麼使用模板化結構來保存硬編碼值而不是簡單的值表? –