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);
}
、これは非常に迷惑です。すべての議論を進める良い方法はありますか?次のコードは、例えば、SFINAEは役立つかもしれない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)...);
}