2012-12-01 137 views
3

我有一個函數應該接受任何類型的參數。因此我使用模板。通過無效作爲函數參數

template <typename T> 
void Function(T Parameter); 

該函數的功能是調用函數。在我的真實應用程序中,有一個帶有字符串鍵的回調映射,但對此問題無關緊要。回調必須是返回類型爲void但函數參數類型的函數指針。

void* Callback; 

template <typename T> 
void Function(T Parameter) 
{ 
    (function<void(T))Callback(Parameter); 
} 

假設回調是正確的類型,這應該像下面的工作。

Function<int>(42); 

// should result in... 
(function<void(int))Callback(42); 

但在某些情況下,我想通過void作爲參數。

Function<void>(void); 

// should result in... 
(function<void(void)>Callback(void); 

正如你所看到的,我需要提供什麼或void作爲參數。但是我不能通過void作爲參數,所以有一個錯誤,即typename會不正確。

如何將void作爲函數參數傳遞?

+1

有可能是'提升',但如果你只是寫了'功能'會發生什麼? –

+0

你應該有一個可變參數模板,比如'template void Function(Args ...)'。我們幾天前討論過這個問題。四處搜尋。 –

+0

聽起來像模板專業化的工作。不幸的是,它不支持類外funcs – SomeWittyUsername

回答

8

爲什麼不只是指定一個非模板過載?

void* Callback; 

template <typename T> 
void Function(T Parameter) 
{ 
    (function<void(T)>)Callback(Parameter); 
} 

void Function() 
{ 
    (function<void()>)Callback(); 
} 
+0

爲什麼我沒有這個想法?謝啦! – danijar