2013-06-29 50 views
2

如果模板參數是值或類型,是否可以使用特徵來推斷?是否可以使用特徵檢測模板中的值或類型?

template <typename A> 
void function(){ 
    if(is_value<A>()::value) 
     cout<<"A is value"<<endl; 
    else 
     cout<<"A is type"<<endl; 
} 

int main(){ 
    function<int>(); 
    function<3>(); 
} 

輸出

"A is type" 
"A is value" 
+0

,你能想象,,這將是巨大有用。這將允許lambdas和非常好的東西一起使用:D – GameDeveloper

+1

一個值不是一個類型,'template '需要一個類型。沒有骰子,沒有「全部捕捉」參數。 – Xeo

回答

1

每14.3/1標準:

存在三種形式的模板說法,對應於三個 形式模板參數的:類型非型模板

而且每14.3.1/1標準:

模板參數的用於模板的參數,該參數是一個應爲型-ID

由於模板參數是,你應該通過一個型-ID作爲模板參數。 3不是type-id。所以,這是不可能的。

你只能添加一個函數非類型模板參數:

template <class A> 
void function() 
{ 
    std::cout << "A is type" << std::endl; 
} 

template <int A> 
void function() 
{ 
    std::cout << "A is value" << std::endl; 
} 

int main() 
{ 
    function<int>(); 
    function<3>(); 
} 
+0

很好,但是對於每種可能的「值類型」都需要不同的功能。所以基本上不可能做我期望的事情:(。 – GameDeveloper

相關問題