私はテンプレートメタプログラミングの初心者で、類似しているがわずかに異なるコードの複数のバージョンの生成を実装しようとしています。
#include <iostream>
enum Type
{
a1,
a2
};
enum Style
{
b1,
b2
};
template<Type,Style>
void doSomething();
{
std::cout<<" some rubbish\n";
};
完全な専門化はうまく機能します:
template<>
void doSomething<a1,b2>()
{
std::cout<<" this is my template parameters one :" <<a1<< " and two:"<<b2<<std::endl;
}
int main(int argc, char* argv[])
{
doSomething<a1,b1>();
doSomething<a1,b2>();
return 0;
}
:ごみ
:これは私のテンプレートパラメータです1:0と2:1
しかし、以下のような部分的な特殊化は失敗します。
template<Style Some>
void doSomething<a1,Some>()
{
// here I want to use sub-template on some: e.g do_other<Some>
}
エラーあり:エラーC2768:'DoSomething':明示的なテンプレート引数の不正使用
(この場合、ジェネリックテンプレートの本体はコメント化されていますが、違いはありません)
このような特殊化は、部分的な特殊化のすべてのサンプルに含まれていますが、私には機能しません。これは私を大いに混乱させます。
どんな提案にも非常に感謝します