2016-04-23 32 views
2

爲了提高代碼的可讀性,我想分配更短的名稱函數模板就像在下面的例子:無法較短的名稱分配給C++函數模板

#include <iostream> 

template<typename T> 
T func(T a, T b) 
{ 
    return a + b; 
} 

int main() 
{ 
    using fi = func<int>; 
    using fd = func<double>; 

    std::cout << fi(1, 1) << std::endl; 
    std::cout << fd(1.0, 1.0) << std::endl; 

    return 0; 
} 

但在嘗試編譯,我得到一個錯誤

$ g++ func.cpp -o func 
func.cpp: In function ‘int main()’: 
func.cpp:11:11: error: expected nested-name-specifier before ‘fi’ 
    using fi = func<int>; 
     ^

什麼是可以接受的方式爲函數模板分配較短的名稱,而不必依賴預處理器定義?

回答

4

使用引入類型。函數模板及其實例不是類型。

auto替換using會讓你的代碼編譯並做你可能想要的。許多cpmpiler對內聯簡單函數指針的情況很好,所以在prod中它可能沒有性能影響。

+0

如何使用'typedef'? –

+2

@ThomasMatthews:顧名思義,'typedef'也引入了_type_。 –