看板 C_and_CPP 關於我們 聯絡資訊
Code : http://codepad.org/mTAG98oV 編譯環境是VC 2008 SP1 我想問題問題有兩個 1、 第36行開始的全特化compile不過 錯誤訊息: C2143: syntax error : missing ';' before '<' 嗯..後面幾個不重要,總之是syntax error 以前面的function template foo為例,全特化的模板參數可寫可不寫 不寫的話compiler會幫你推導 但是在constructor template,不寫會過(code 31行) 寫了反而會compile error..這是什麼巫術!? 2、 第43行 compile error MyTest test(true, true); 因為沒有這個constructor 這我可以理解,第5行的template根本沒有instantiation 我想問題問題是,有什麼方法可以explicit instantiation這個template嗎? MyTest test<bool>(true, true); 也會syntax error.. 當然如果像第10行那樣,參數列上有typename,就能deduce出來 但是像第5行的template有辦法explicit instantiation嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.171.80
hilorrk:第一眼看過去 只發現你29行少一個分號XD 08/26 01:07
hilorrk:沒事...當我沒說 08/26 01:08
holymars:姆 我也不知道為什麼少一個分號 不過function後的分號 08/26 01:10
holymars:本來就可加可不加 應該不影響 08/26 01:10
hilorrk:就我所知第二個問題是無解的 08/26 01:24
holymars:對了,我剛剛在GCC的Bug report #9050發現一樣的問題 08/26 01:24
holymars:但是我學校的工作站只到4.4.5,不知道誰有4.5可以試試看 08/26 01:25
Fenikso:4.6會過 08/26 01:28
holymars:好吧 看來這是M$的巫術了 我該換2010了.. 08/26 01:30
hilorrk:可以寫個template factory替代XD 08/26 01:31
hilorrk:4.5好像還是沒有更正這個bug? 08/26 01:46
loveme00835:第一個問題解決 http://codepad.org/XHhunUss, 雖然角 08/26 02:01
loveme00835:括號裡的參數可以不給, 但是 VC2010 似乎強制不能給 08/26 02:04
loveme00835:VC2008 也是一樣 08/26 02:08
loveme00835:沒看到前面幾行= =拍謝 08/26 02:13
yoco315:不用換2010, 因為我用2010也是兩個都不給過 XD 08/26 08:18
kevingwn:http://codepad.org/rqhWVPB7 這樣子可以嗎? 08/27 10:15
holymars:To 樓上: 參數列上有T和U當然可以deduce出來啊.. 08/28 05:55
holymars:我的問題是有沒有除了deduce之外的方法instantiation.. 08/28 05:56
kevingwn:template<class T> MyTest::MyTest(bool,bool,T* = 0) {} 08/28 11:34
kevingwn:MyTest test(true, true, new bool(false)); 08/28 11:35
kevingwn:不太了解要這樣使用的意義,方便講解一下嗎? 08/28 11:37