2

C++ で書かなければならない C# コードがたくさんあります。私は C++ の経験があまりありません。

Visual Studio 2012を使用してビルドしています。プロジェクトは C++ のスタティック ライブラリです(C++/CLI ではありません)。

多くの場所で、次のようにString.Formatを使用していました。

C#

String.Format("Some Text {0}, some other Text {1}", parameter0, parameter1);

今、私は以前に同様のことが尋ねられたことを知っていますが、これを行うための最も標準的/安全な方法が何であるかは私には明らかではありません.

sprintfprintfのようなものを使用しても安全でしょうか? 私は彼らが標準的ではないように言及している何人かの人々を読みました。このようなもの?(これは C++ のやり方ですか、それとも C のやり方ですか?)

C++ (または C ですか?)

char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "Some Text %d, some other Text %d", a, b);

他の人が独自のクラスを作成することを提案し、私はさまざまな実装を見ました。

とりあえず、 std::to_stringostringstreamstd::string.replacestd::string.findTemplatesで使用するクラスがあります。私のクラスはかなり限られていますが、C# コードの場合は機能します。今、私はこれが最も効率的な方法であることを知りません(またはまったく正しい方法です):

C++

template <typename T>
static std::string ToString(T Number)
{
    std::ostringstream stringStream;
    stringStream << Number;
    std::string string = stringStream.str();
    return string;
};

template <typename T,unsigned S> 
static std::string Format(const std::string& stringValue, const T (&parameters)[S])
{ 
    std::string stringToReturn = std::string(stringValue);

    for (int i = 0; i < S; ++i)
    {
        std::string toReplace = "{"+ std::to_string(i) +"}";
        size_t f = stringToReturn.find(toReplace);
        if(std::string::npos != f)
            stringToReturn.replace(f, toReplace.length(), ToString(parameters[i]));
    }

    return stringToReturn;      
};

//I have some other overloads that call the Format function that receives an array.
template <typename T>
    static std::string Format(const std::string& stringValue, const T parameter, const T parameter2)
    {
        T parameters[] = {parameter, parameter2};
        return Format(stringValue, parameters);
    };

また、コードがLinuxWindowsの両方で機能する必要があるため、ビルドするにはさまざまなコンパイラが必要です。そのため、標準的な方法を使用していることを確認する必要があります。また、私の環境はそう簡単に更新できないため、C++11 を使用できません。Boostも使用できません。動作するために必要なさまざまな環境にライブラリを追加できるかどうかわからないからです。

この場合、私が取ることができる最善のアプローチは何ですか?

4

3 に答える 3

0

<<演算子を使用して文字列をフォーマットしないのはなぜですか?

string strOutput;
stringstream strn;
int i = 10;
float f = 20.0f;
strn << "Sally scored "<<i<< " out of "<<f << ". She failed the test!";
strn >> strOutput;
cout << strOutput; 
于 2013-11-08T13:18:58.817 に答える