我需要一個C++模板,在給定類型和該類型對象的情況下,它可以根據類型是否爲整數來做出決定,同時能夠訪問實際對象。我試過這個C++模板專業化問題
template <typename T, T &N>
struct C {
enum { Value = 0 };
};
template <int &N>
struct C<int, N> {
enum { Value = N };
};
但它不起作用。有什麼辦法可以達到類似的目的嗎?
編輯
我試圖實現了這樣的事情,會發生在編譯時說:
if (type is int) {
return IntWrapper<int_value>
else {
return type
}
實際上,你可以通過指針或引用對象模板實例,像這樣:
struct X {
static const int Value = 5;
};
template <X *x>
struct C {
static const int Value = (*x).Value;
};
X x;
std::cout << C<&x>::Value << std::endl; // prints 5
但顯然這一切都完成了初始化模板通過推斷環x
的類型,並且x
也需要全局聲明。沒有用,我想要做的事情,我認爲在編譯時畢竟是不可能的。
聽起來你需要一個函數模板,因爲類模板需要你明確指定模板類型參數。你能發佈一個用法示例來澄清你想要做什麼嗎? – 2009-05-26 13:29:35
@j_random_hacker:您可以將模板留空並且有專門的類...您不必指定模板類型。 – Partial 2009-09-08 21:13:44