0

私は、私の一部の (C/C++ 初心者) 同僚がパラメーター ストアから名前付きのスカラー パラメーター値を取得するのをより簡単かつ確実にするためのヘルパー関数を作成しています。

問題は、パラメータ ストアは type の値しか格納できないということですが、doubleこの関数を呼び出すコードは、C++ に変換された C の非常に厄介な山であるため、問題が発生する可能性がある場所があります (または少なくとも偽のorが期待されるdouble場所にa をダンプするだけです。intlong

そこで、ヘルパー関数を、戻り値の型が指定されていないテンプレート引数であるテンプレート関数にするという考えがありました。そのようにして、呼び出し元は戻り値の型を手動で指定する必要があります。

ただし、関数の引数は Unicode 文字列 ( const wchar_t*) であり、ユーザーが記号名で行っていたように (以前はマクロを使用して) 呼び出すことができるようにしたかったのです。

テンプレート関数と引数を自動的に文字列化する方法を組み合わせる方法がわかりません! 誰でもガイダンスを提供できますか?私は基本的に、審美的な理由から、巧妙なマクロ/テンプレート ハックを探しています ;-)

マクロとして:

// the return type is always double
#define GetParameter(parameterName) GetParameterFromParameterStore(L#parameterName)

テンプレート関数として:

// the user has to remember to pass the argument as a (wide) string
template<class T> T GetParameter(const wchar_t* parameterName)
{
    return (T)GetParameterFromParameterStore(parameterName);
}

編集:理想的には、次のように関数を呼び出せるようにしたいと思います:

int _volumePct = GetParameter<int>(VolumeInPercent);

(余分な装飾や構文はありません)。

4

1 に答える 1

1

1 つの方法は、新しいマクロを作成して文字列化することです。

#define Stringify(parameter) L#parameter

以下のように GetParameter テンプレート関数に渡します。

GetParameter<int>(Stringify(hello there));

これはあなたがやろうとしていることですか?しかし、既存のマクロを使用して結果を型キャストする方が良いと思います。

于 2013-10-05T17:17:05.030 に答える