2013-10-04 179 views
0

考慮這個例子:模板paramater - 指針模板類型

template< typename T, T &V> 
void doSomething() { 
    V = 1; 
} 

int i; 
double d1, d2; 

int main() { 
    doSomething< int, i>(); 
    doSomething< double, d1>(); 
    doSomething< double, d2>(); 
    return 0; 
} 

是否有可能消除調用類型的名字呢?例如:

doSomething< i>(); 
    doSomething< d1>(); 
    doSomething< d2>(); 

請注意,函數簽名不應該改變。您仍然必須能夠這樣使用它:

typedef void (*THandler)(); 

THandler handlers[] = { 
    &doSomething< int, i>, 
    &doSomething< double, d1>, 
    &doSomething< double, d2> 
}; 
+0

一個側面說明:在C++'無效的主要()'是'main'無效的簽名。 –

回答

1

是的。

template<typename T> 
void doSomething(T& V) { 
    V = 1; 
} 

但是你用這種方式:

doSomething(i); 
doSomething(d1); 
doSomething(d2); 
+0

由於提出的解決方案更改了方法簽名,所以這並不回答問題。目的是讓函數綁定到在編譯時改變的值。以便它們可以放入一個函數指針數組中。 – Sergey

+0

@謝謝:那麼答案是否定的。它不能做到。模板函數的類型推導基於函數參數。 –