2012-02-22 80 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