2
注意:如果純粹是爲了自我教育。以enum類爲模板參數縮短模板函數調用
我有以下模板:
template <typename T, T val>
void Foo() {
static_assert(false, "You should not be here");
}
,我想創造出衆多專業化,像這樣:
enum class ENUM { A, B };
template<>
void Foo<ENUM, ENUM::A>() {
// something
}
此代碼與ENUM ::一個正常工作作爲模板參數,並正確地觸發static_assert,而不是與ENUM :: A一起調用。
的問題是 - 這樣的功能調用語法非常難看,就像這樣:
Foo<ENUM, ENUM::A>();
有什麼辦法縮短它只是
Foo<ENUM::A>();
但是,留下完整的想法,其他枚舉類型可以作爲模板參數傳遞。下面
代碼爲不是解決
template <ENUM val>
void Foo() {} // and further specialize only for values of ENUM