1

おはようございます。

技術的には、文字配列の単なるラッパーであるクラスがあります。文字列の構築時にメモリを割り当て、破棄時に解放します。それは問題ではありません。

任意の vararg 関数 (sprintf など) に渡したいときはいつでも、問題が発生しますnon-trivial type

少しGoogleで検索した後、「自明な型」は、でコピーできる任意の型でありmemcpy、コンストラクターなどを持たないことがわかりました。

今私の質問:変数を書き込むだけで、コンパイラに内部文字列を渡す方法はありますか?

そして例:

Wrapper Var("World");
sprintf(Buf, "Hello %s", Var);

この呼び出しの後、「Hello World」になるはずです。

内部ストリームにアクセスする関数を作成 (および呼び出し) すると機能します (のようc_str()に、しかしそれはクラスの目的ではありません。通常の char 文字列のように渡すことができるクリーンな API であると想定されています。メモリ管理機能だけで。

私はもう試した:

operator char *() {
    return InternalString;
}

によって呼び出されていないようですsprintf

ご清聴ありがとうございました。

4

3 に答える 3

2

暗黙の変換演算子は、 のような変数 arg 関数では機能sprintf()しません。これは、コンパイラがオブジェクトを変換する必要がある型を認識していないためです。したがって、この場合、c_str()関数 (または同様のもの) を使用するか、 を使用して明示的にキャストする必要がありますstatic_cast<char*>(Var)

于 2013-10-08T07:28:22.580 に答える
1

非 POD オブジェクトを可変引数関数の引数として渡すことはできません。Boost Format を確認するか、C++11 を使用して独自のタイプ セーフな sprintf 関数を記述してください。

于 2013-10-08T07:33:51.463 に答える