2014-09-25 102 views
0

我有一個模板化的API函數,看起來像這樣:將參數添加到公共模板

template<typename funcT, class T> int funcProperties(
    T  func, 
    funcT extract, 
    int limit = 0); 

現在我想一個標誌參數添加到該模板。我應該添加一個新的模板,還是我可以簡單地將標誌添加到現有的API,然後發佈它?

新的API應該是這樣的:

template<typename funcT, class T> int funcProperties(
    T  func, 
    funcT extract, 
    int  limit = 0, 
    unsigned flags = 0); 

回答

0

答案取決於具體情況:

  • 你正在建設一個圖書館與你的API和您的客戶與它連接

  • 或者您將運送API作爲源代碼並且您的客戶編譯它

在第一種情況下,爲了讓庫包含函數模板的實例,您可能會明確地實例化它。如果您使用extern "C"導出,那麼您的導出只能導出一個實例,因此它將起作用。如果不是,那麼funcProperties函數的每個實例都會名稱被破壞(請參閱Name Mangling),並且它們中的每一個都將包含所有模板參數。所以導出的名稱會改變。因此,在這種情況下,您的客戶將不得不攜帶新的頭文件並重新編譯並鏈接其解決方案。在這種情況下,如果添加其他版本,它們可能會更方便。

在第二種情況下它應該工作 - 當你的客戶端將重新編譯他們的代碼時,模板將被簡單地實例化爲最後一個模板參數的默認值。