typedef
以下のように、'dデータ型を参照する関数がいくつかあります。
typedef std::map<string, string> dict;
union ret_t{
int i;
long l;
double d;
};
ret_t func1(char* bytes, dict &d){
//blah blah
}
ret_t func2(char* bytes, dict &d){
//blah blah 2
}
boost::function
以下に定義されているように、ハンドラー関数のマップもあります。
std::map <int, boost::function< ret_t (char*, dict) > > handlers;
これを定義したのは、使用している100を超えるハンドラー関数を使用して、キーを読み取って呼び出しhandlers[key](bytes, d);
、関数を実行するだけで、さまざまなデータ型に対して3つのif / elsesのみが必要になるようにしました(必要なデータ型を知っている私が入らない別の問題。それは質問とは無関係です)。これは期待どおりに機能します。
私の問題は、少数の関数がディクショナリを利用せず、ハンドラーの外部のコンテキストで役立つことです(たとえば、バイトのストリームを準備してそれをlong intに変換する関数)。dictが事前定義されていないコンテキストからこの関数を呼び出すには、使用されない役に立たないdictを作成する必要があります。
dict d;
func1(bytes, d);
または、関数を実行する必要があります。
//previous definition
ret_t func1(char* bytes){
//same blah blah as before
}
NULL
または空のdictなどのデフォルトの引数を使用して定義しようとすると、コンパイラエラーが発生します。
default argument for 'dict& d' has type 'dict {aka std::map<std::basic_string<char>, std::basic_string<char> >}'
参照の代わりにポインターを渡すためにコードを完全に書き直す必要なしに、私が望むことを行う方法はありますか?