2012-02-22 49 views
0

聲明boost :: poor是如下所示。boost :: pool中不需要模板參數

boost::pool<> Obj(); 

我很好奇,你如何讓需要沒有模板參數,但只有<>類模板?

我試着將它作爲boost :: pool在pool.hpp和poolfwd.hpp中做。

template<class T> 
class Fakepool { }; // pool.hpp 

template<class T = int> 
class Fakepool; // boost::pool's declaration in poolfwd.hpp 

int main() 
{ 
    Fakepool<float> a; 

    Fakepool<> a2; // Can't do this with only <> 
}//main() 

在此先感謝!

+0

你錯過了類聲明後,分號:'模板類Fakepool {};' – 2012-02-22 01:36:15

+0

@YunHuang感謝糾正這種。但這只是關於複製和粘貼的錯誤。 – 2012-02-22 01:47:52

回答

2

這是你在找什麼?

template<class T = int> 
class Fakepool { }; 

int main() 
{ 
    Fakepool<float> a; // Use float 

    Fakepool<> a2; // Default as int 
} 

你也可以,做到這一點(我認爲是你在想什麼)。這裏的關鍵字是default template arguments。但是,在您的示例中,您在之前定義了類,這是問題所在。

template<class T = int> 
class Fakepool; 

template<class T> 
class Fakepool { }; 

int main() 
{ 
    Fakepool<float> a; 

    Fakepool<> a2; 
} 
+0

謝謝。我應該寫我的代碼,就像你剛剛展示給我的代碼,但boost :: pool有點奇怪,看起來實際上就像我編碼的代碼。我很欣賞這個。 – 2012-02-22 01:57:04

+0

你能解釋爲什麼這個工程?否則,我們會留下「發現差異」,並想知道我們發現的差異是否確實相關。 – 2012-02-22 02:02:53

+0

@RobKennedy:在C++函數和模板中可以有默認參數,例如,如果你聲明瞭一個函數'void f(int x = 5)',你可以像這樣調用它'f()'或者像這樣指定參數' f(10)',它與上面的原理相同。 – 2012-02-22 02:09:43

相關問題