2013-03-31 56 views
3

如果我有一個像C++模板化構造函數:它們是否阻止推斷某些類型?

struct Foo 
{ 
    template<class T> 
    Foo(T arg) { } 
}; 

代碼並防止T從以往任何時候都constvolatile,或參考?

同樣,如果我有

struct Bar 
{ 
    template<class T> 
    Bar(T const volatile &arg) { } 
}; 

意思T永遠不會constvolatile,或參考?

基本上,這是否意味着構造函數模板參數必須被推斷,即不能被指定爲推斷值以外的任何東西?

+0

(1)否(2)是的。 –

+0

@n.m .:有趣的是,爲什麼是(1)否? (什麼是反例?) – Mehrdad

+0

嗯,其實這是錯誤的。 (1)似乎也是「是」,我會立刻挖掘參考。 –

回答

3

是的,您在調用構造函數模板時無法顯式指定模板參數。

因爲你永遠不會直接調用它,但總是隱式地通過強制轉換或聲明。

只有在顯式專門化或實例化時,才能指定它們。這不是真的有用,但可能

// explicit instantiation 
template Bar::Bar<const int>(const int); 
+0

+1有意思......所以像這樣專門研究Bar :: Bar是完全沒用的,因爲它不能是const int嗎? – Mehrdad

+0

是的:)至少如果你想出了一個讓它變得有用的方法,你將成爲我的男人 –

+0

Hahha有趣,謝謝你的回答! :) – Mehrdad

相關問題