2012-11-08 60 views
-1

我对std :: enable_if很陌生,想知道如何使用它。 我有一个模板类:std :: enable_if第二次询问

template<int a, int b> 
class foo { 
    int c; 
} 

我只希望模板有成员c当

a = 5. 

我该怎么做,使用的std :: enable_if? 这是一个正确的情况下使用std :: enable_if?

+0

这是怎么从你的[第一个问题]不同(http://stackoverflow.com/questions/13260581/c-stdenable-if)?也就是说,为什么你不能使用在这个例子中被接受的答案中建议的技巧? – jogojapan

+0

第一个是关于执行a + b遵循一些规则。这是关于包括一些基于关于 – WhatABeautifulWorld

回答

3

您可以使用部分专业化。不需要std::enable_if

//primary template 
template<int a, int b> 
class foo 
{ 
     //whatever 
}; 

//partial specialization 
template<int b> 
class foo<5,b> //when a = 5, this specialization will be used! 
{ 
    int c; //it has member c 
}; 

用法:

foo<1,3> f1; //primary template is used 
foo<5,3> f2; //partial specialization is used 
+0

的一些规则的c在这种情况下,很多代码是重复的? – WhatABeautifulWorld

+1

@WhatABeautifulWorld:然后正确地提出问题。在问题中提供更多信息。另外,如果有帮助,您可以尝试使用基本公共类模板。 – Nawaz