是否可以在專門的模板類中訪問非類型模板參數的值?是否可以在專門的模板類中訪問非類型模板參數的值?
如果我有一個專門的模板類:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
我知道它上面的情況下,簡單的硬編碼值4和0,而不是使用變量,但我有我專業的較大類什麼我希望能夠訪問這些值。
是否有可能在A < 4,0>中訪問major
和minor
值(4和0)?還是我必須給它們分配的模板實例爲常數:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
如果您是基於值進行專門化,那麼它暗示着這些特定值有一些特殊之處。如果您在整個模板中將它們用作常規值,並且只在幾個地方將它們視爲特殊值,則可能會將特殊行爲抽象爲較小的專用類模板,從而使大模板成爲完全通用和未專用的模板。這有點難以分辨,所以你可以擴大你的問題,使其更「真實」? – 2009-07-22 06:59:51
我認爲這個問題足夠真實。我有基於協議版本實現特定行爲的現有基類。以前它有一個成員返回協議版本 - 因爲該成員不再可用,所以有一個記錄方法在輸出中包含協議版本。我可以硬編碼的價值,但我想知道是否有更好的方法。被接受的答案提供了很好的方法 - 我實際上在其他地方以類似的方式使用特徵 - 獲取參數類型,但意圖是相同的。 – stefanB 2009-07-22 07:37:32