2

私はテンプレートメタプログラミングの初心者で、類似しているがわずかに異なるコードの複数のバージョンの生成を実装しようとしています。

#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':明示的なテンプレート引数の不正使用

(この場合、ジェネリックテンプレートの本体はコメント化されていますが、違いはありません)

このような特殊化は、部分的な特殊化のすべてのサンプルに含まれていますが、私には機能しません。これは私を大いに混乱させます。

どんな提案にも非常に感謝します

4

2 に答える 2

2

C++ では、関数の部分的な特殊化を行うことはできません。関数をクラスに移動することを検討してください。

于 2011-12-02T13:42:53.170 に答える
0

型の特殊化を使用する C++ 優先度関数。残りは通常のテンプレート関数によって処理されます。

于 2011-12-02T13:46:20.647 に答える