我現在有一個函數模板,引用以參考的,但這東西在本質上等同於:處理的C++模板
template <typename T>
void f(T& t)
{
t = T();
}
現在,我可以打電話:
int a;
f(a);
初始化我的變量a。 我甚至可以這樣做:
std::vector<int> a(10);
f(a[5]);
然而,這將失敗:
std::vector<bool> a(10);
f(a[5]);
的原因是a[5]
返回參考語義對象,而不是引用。所以,我需要能夠寫:
template <typename T>
void f(T a)
{
a = T();
}
但如果我加入這個新的模板,並嘗試編譯第一個例子(與INT),我得到了以下錯誤:
test_multi_tmpl.cc: In function ‘int main()’:
test_multi_tmpl.cc:20: error: call of overloaded ‘f(int&)’ is ambiguous
test_multi_tmpl.cc:6: note: candidates are: void f(T&) [with T = int]
test_multi_tmpl.cc:12: note: void f(T) [with T = int]
任何想法如何解決這個問題?我不想超載f
只爲std::vector<bool>::reference
,因爲這個構造可能出現在其他地方...
'vector'也可能工作。 –
2009-12-16 19:01:31
'vector'技術上會更接近。 –
2009-12-16 19:11:33
專精'std :: vector'確實被棄用,但爲什麼要停止使用布爾值向量呢? –
2009-12-16 19:16:49