如何将typename作为函数中的参数?(C++)

1 c++ file-io function-parameter typename

我需要能够将typename作为参数传递:

int X = FileRead(file, 9, char);
Run Code Online (Sandbox Code Playgroud)

这个概念是为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;
}
Run Code Online (Sandbox Code Playgroud)

但这需要我创建一个每次我想使用FileRead时使用的类型的变量,我真的不想因为一个函数而重新设计整个程序,所以无论如何都要使用typename作为参数?

180*_*ION 12

要使用类型名称作为参数,请使用模板.

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

这假定该类型是默认可构造的.如果不是,我想你无论如何都难以将它从文件中流出来.

像这样称呼它:

char value=FileRead<char>(file, pos);
Run Code Online (Sandbox Code Playgroud)

如果您不想在调用中指定类型,则可以修改API:

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

然后像这样调用它 - 推断类型:

char value;
FileRead(file, pos, value);
Run Code Online (Sandbox Code Playgroud)

  • 像FileRead <char>(file,pos)一样调用它; (2认同)