0

例えば:

template<typename T>
void write(T value)
{
    mystream << value;
}

template<>
void write<const char*>(const char* value)
{
    write_escaped(mystream, value);
}

template<>
void write<char*>(char* value)
{
    write_escaped(mystream, value);
}

template<>
void write<const std::string&>(const std::string& value)
{
    write_escaped(mystream.c_str(), value);
}

これは、特に const と non-const char* の 2 つのバリアントで、間違っているように見えます。ただし、VC++ 10 で次のように呼び出されるとconst char *、変数を渡すだけで特殊char *化されていないバージョンが呼び出されることを確認しました。

char something[25];
strcpy(something, "blah");
write(something);

これを行う適切な方法は何ですか?

4

3 に答える 3

1

あなたはそれを適切な方法で行いました。

char *const char *は2つの異なるタイプ名であり、それぞれに独自の特殊化が必要です。

于 2010-06-10T11:04:50.517 に答える
1

C++ コンパイラは、型 T と型 const T を異なるデータ型として扱います。これは、テンプレートがデータ型仕様で機能するためです。明示的なデータ型ごとに明示的な定義を記述する必要があります。

于 2010-06-10T11:13:02.337 に答える
0

std::stringstream がこれらすべての型を既に処理していることを考えると、一体なぜそれらに特化する必要があるのでしょうか?

それに加えて、C++ 開発者が const char* を処理する必要はありません。または memcpy を使用します。そこから std::string を作成するだけです。そして、上記の std::string への const 参照を取ります。真剣に、ここに C を書き込もうとしているのですか?

于 2010-06-10T11:29:07.743 に答える