2011-01-31 22 views
2

私はのコンパイラエラーを取得しています(エラーが関数にパラメータが欠落している)意味がありません。 :次のようにコンパイラエラーは

template<typename RT, typename func, typename... Args> 
RT buildTransFunc(func f, Args... args) 
{ 
    return RT(boost::bind(f, _1, args...)); 
} 

私は上記を呼び出しています:

typedef boost::function<std::string (short int)> toASCIITranslator; 
toASCIITranslator temp = buildTransFunction<toASCIITranslator, std::string (*) (short int, boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType&), boost::function<EnumType(short int)>, EnumTypeToStringTranslatorType& > 
(&Translator<std::string, forward_trans, short int, boost::function<EnumType (short int)>, EnumTypeToStringTranslatorType>, boost::function<EnumType(short int)(&enumChecker), EnumTypeToStringTranslator); 

エラーメッセージ内のstd :: string(*)(short int、boost :: function、EnumTypeToStringTranslatorType &)パラメータをスキップしてエラーメッセージが表示されているようです。

私はGCC 4.5.2をコンパイラに使用しています。

翻訳機能の宣言は次のとおりです。

template<typename RT, typename D, typename... Args> 
RT Translator(Args... args) 
{ 
    return static_cast<RT>(translate<RT, D>(args...)); 
} 

変換機能は、この問題で見つけることができます: Translate

EDIT は、パラメータをspecifing終了するbuildTransFunctionへの呼び出しを修正しました。

g ++引数が使用されました:-std = C++ 0x。

+1

toASCIITranslator temp = buildTansFunc<.....>(....); 

はちょうどこのような呼び出しを行います。コンパイラにC++ 0xをコンパイルするように指示しましたか? –

+0

はい、コンパイラの引数リストに-std = C++ 0xを追加しました。 – diverscuba23

+0

あなたは奇妙なコードが必要です。 '&enumChecker'があなたに' boost :: function <> 'を与えるのはなぜですか?また、 'f'をどこで宣言しましたか?すべてが実際のコードのようには見えません。また、翻訳者の宣言が必要です。 –

答えて

1

私はこの質問の道徳があまりにも空想的ではないと思っています...これは によって動作します。これはseprate関数を使って転送するのではなく、パラメータでboost :: bindを明示的に呼び出します。

ので、代わりにこの:あなたがC++ 0xの機能(変数テンプレート引数リスト)を使用している

toASCIITranslator temp = boost::bind(&Translator<std::string, forward_trans, short int, boost::function<EnumType(short int), EnumToStringTranslatorType&>, 
         _1, 
         boost::function<EnumType(short int)>(&enumChecker), 
         EnumToStringTranslator);