不談適用性,純粹語(yǔ)法上實(shí)現(xiàn),我自己無(wú)能為力。
template<typename?T,?template<T?a>?class?T2>
class?TmTm


{
};
posted on 2006-04-05 23:24
萬(wàn)連文 閱讀(897)
評(píng)論(12) 編輯 收藏 引用 所屬分類:
模板
FeedBack:
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-06 00:01 |
gcc 2.4.2:
template < int i >
class damn
{
};
TmTm < int, damn > obj;
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-06 13:42 |
謝謝,GCC果然對(duì)C++語(yǔ)法支持好一些,我開(kāi)始也是那樣考慮,但是用VS2003就是不支持,不知道2005怎么樣。
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-06 14:20 |
2005也不行。
因?yàn)闊o(wú)論如何都不知道如何給出一個(gè)int的值。
從這一點(diǎn)來(lái)說(shuō),gcc不知道會(huì)把damn實(shí)例化成什么,damn<0>嗎?
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-06 15:45 |
@沐楓:
此例中TmTm并沒(méi)有實(shí)際使用T2,因此實(shí)例化TmTm時(shí)并不會(huì)實(shí)例化damn
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-06 15:50 |
在上面只需要一個(gè)類型而已,其實(shí)由于前面T類型可以推導(dǎo)出class T2的模板類型,但是VS2003就是不支持,我想可能是由于它的編譯器更傾向與開(kāi)發(fā),做了一些處理以減少編譯器復(fù)雜度。
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-07 18:52 |
上面那個(gè)在VS2003中不可以,在GCC中估計(jì)可以,類型匹配,但是可以省略調(diào)vector的<int>
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-10 20:46 |
2005也不支持,尚未找到2005中使用該類的方法。VC的目的也不是減少編譯起復(fù)雜度,他的偏特化推導(dǎo)就非常強(qiáng)。看來(lái)寫(xiě)C++編譯器真是一件殺腦細(xì)胞的事情。。
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-11 14:34 |
在m$ weak vc2003中可以這樣變通:
template < typename Ty >
struct dummy
{
template < Ty a >
struct damn
{
};
};
TmTm < int, dummy < int >::damn > obj;
05沒(méi)試,大抵也可通過(guò)
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-04-11 22:16 |
上面可以通過(guò),從VC編譯器來(lái)講總算是欺騙了它,編譯器沒(méi)有從typename T的類別推導(dǎo)出template<T a> 中的T,非得認(rèn)為構(gòu)造一個(gè)一摸一樣的類型來(lái)填補(bǔ)第二個(gè)參數(shù)。
回復(fù) 更多評(píng)論
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
# re: 能生成這個(gè)類的一個(gè)對(duì)象嘛???
2006-06-16 16:44 |
,2003可以支持模板的模板參數(shù)。可以生成這樣的類呀
template<typename T,template<T a> class U>
class T
{
};
這樣沒(méi)有任何問(wèn)題呀
回復(fù) 更多評(píng)論