2

タイプ名をパラメーターとして渡すことができる必要があります。

int X = FileRead(file, 9, char);

概念は、 FileRead(std::fstream, int pos, ???) が pos*sizeof (タイプが何であれ) を読み取って、目的の位置を取得することです。テンプレートを試しました:

template<typename T>
T FileRead(std::fstream file, int pos, T type)
{
    T data;
    file.read(reinterpret_cast<char*>(&data), sizeof(data));
    return data;
}

しかし、それには FileRead を使用するたびに使用する型の変数を作成する必要があり、1 つの関数のためだけにプログラム全体を再設計する気がまったくないので、型名をパラメーターとして使用する方法はありますか? ?

4

4 に答える 4

13

型の名前をパラメーターとして使用するには、テンプレートを使用します。

template<typename T>
T FileRead(std::fstream &file, int pos)
{
    T data;
    file.read(reinterpret_cast<char*>(&data), sizeof(T));
    return data;
}

これは、型がデフォルトで構築可能であることを前提としています。そうでない場合は、とにかくファイルからストリーミングするのが難しいと思います。

次のように呼び出します。

char value=FileRead<char>(file, pos);

呼び出しで型を指定する必要がない場合は、API を変更できます。

template<typename T>
void FileRead(std::fstream &file, int pos, T &data)
{
    file.read(reinterpret_cast<char*>(&data), sizeof(T));
}

次に、次のように呼び出します-型が推測されます:

char value;
FileRead(file, pos, value);
于 2009-06-01T23:18:16.750 に答える
3

非常に簡単です:

template<typename T>
T FileRead(std::fstream file, int pos)
{
    T data;
    file.read(reinterpret_cast<char*>(&data), sizeof(data));
    return data;
}

次の方法で呼び出します。

char x = FileRead<char>(file, pos);
于 2009-06-01T23:19:36.013 に答える
-3

プログラムがコンパイルされると、型などはありません。これが C++ のスタイルです。

于 2009-06-01T23:17:45.393 に答える