1
數字庫通常具有類型指定的函數,函數名稱和參數幾乎相同,例如cblas_[sdcz]gemm
,具體取決於輸入類型。要允許函數重載,因此通過cblas_tgemm
打電話,我寫的這些功能的包裝,如:爲模板函數轉發參數
inline
void cblas_tgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
const CBLAS_TRANSPOSE TransB, const INT M, const INT N,
const INT K, const float alpha, const float *A,
const INT lda, const float *B, const INT ldb,
const float beta, float *C, const INT ldc)
{
cblas_sgemm(Layout, TransA,
TransB, M, N,
K, alpha, A,
lda, B, ldb,
beta, C, ldc);
}
inline
void cblas_tgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
const CBLAS_TRANSPOSE TransB, const INT M, const INT N,
const INT K, const double alpha, const double *A,
const INT lda, const double *B, const INT ldb,
const double beta, double *C, const INT ldc)
{
cblas_dgemm(Layout, TransA,
TransB, M, N,
K, alpha, A,
lda, B, ldb,
beta, C, ldc);
}
顯然,這是很煩人的,因爲我需要遍歷所有的函數參數。有沒有更好的方法來轉發所有參數?下面的代碼,例如,不遺憾的是工作,具有error: redefinition of ‘template<class ... Params> void {anonymous}::cblas_tgemm(Params&& ...)’
template <typename ...Params>
void cblas_tgemm(Params&&... params)
{
cblas_sgemm(std::forward<Params>(params)...);
}
template <typename ...Params>
void cblas_tgemm(Params&&... params)
{
cblas_dgemm(std::forward<Params>(params)...);
}