3

CString :: FormatV関数をカプセル化する関数があり、空のパラメーターリストが関数に渡されたかどうかを検出できる必要があります。これを行うための最良の方法は何ですか?

私の現在のコードは次のようになります

CString ADString::Format(CString csFormat, ...)
{
    //Code comes from CString::Format()
    CString csReturn;
    va_list argList;
    va_start(argList, csFormat);
    csReturn.FormatV(csFormat, argList);
    va_end( argList );
    return csReturn;
}

そして私はそのようなものが欲しいです

CString ADString::Format(CString csFormat, ...)
{
    //Code comes from CString::Format()
    CString csReturn;
    va_list argList;
    va_start(argList, csFormat);
    //If it's empty, don't send to FormatV
    if(!IsArgListEmpty(argList))
        csReturn.FormatV(csFormat, argList);

    va_end( argList );

    return csReturn;
}
4

1 に答える 1

8

できません。printf省略記号を介して渡された引数の数またはタイプを判別する方法はありません。そのため、その情報を渡すには、フォーマット文字列などの他の手段が必要です。

C ++ 11では、可​​変個引数テンプレートを使用して、非常によく似た処理を実行できます。

template <typename... Args>
CString ADString::Format(CString csFormat, Args... argList)
{
    CString csReturn;

    //If it's empty, don't send to FormatV
    if(sizeof... argList != 0)
        csReturn.FormatV(csFormat, argList...);    

    return csReturn;
}
于 2012-08-24T14:10:08.390 に答える