2017-05-24 3 views
2

既知の整数値セット(この場合は1〜4)が指定されています。あなたはあなたのためのループを展開するBoost.Preprocessorを使用することができます整数値セットのテンプレートを特殊化する

template<int level> 
int function(){ 
    //do something 
    return level; 
} 

void wrapper(int level) 
{ 
    switch (level) 
    { 
    case 1: 
     function<1>(); 
     break; 
    case 2: 
     function<2>(); 
     break; 
    case 3: 
     function<3>(); 
     break; 
    case 4: 
     function<4>(); 
     break; 

    } 
} 

int main() 
{ 
    wrapper(4); 
} 
+1

あなたが解決しようとしているまさにあなたの投稿コードはありますか?あなたの 'function()'は単にパラメータを持つことができます: 'int function(int level){/ *何かする*/return level; } '..' wrapper'関数は必要ありません: 'int main(){return function(4);} } ' – txtechhelp

答えて

0

特化し、また、これよりも読むことがいいと短くなって、これらの値のいずれかのテンプレート関数を呼び出す方法はあります。

#include <boost/preprocessor/repetition/repeat_from_to.hpp> 

template<int level> 
int function() { 
    //do something 
    return level; 
} 

#define GENERATE(Z, N, _)      \ 
    case N:          \ 
    function<N>();        \ 
    break; 

void wrapper(int level) 
{ 
    switch (level) 
    { 
    BOOST_PP_REPEAT_FROM_TO(0, 10, GENERATE, nil); 
    default: 
    break; 
    } 
} 

int main() 
{ 
    wrapper(4); 
} 

前処理されたコードは次のようになり、この(短縮)

void wrapper(int level) 
{ 
    switch (level) 
    { 
    case 0: function<0>(); break; case 1: function<1>(); break; case 2: function<2>(); break; case 3: function<3>(); break; case 4: function<4>(); break; case 5: function<5>(); break; case 6: function<6>(); break; case 7: function<7>(); break; case 8: function<8>(); break; case 9: function<9>(); break;; 
    default: 
    break; 
    } 
} 
+0

なぜスイッチを切りますか? – Quentin

関連する問題