Как взять имя типа в качестве параметра в функции? (C++)
Мне нужно иметь возможность передать имя типа в качестве параметра:
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, и я действительно не чувствую необходимости перепроектировать всю программу только из-за одной функции, так что есть ли возможность использовать имя типа в качестве параметра?
3 ответа
Чтобы использовать имя типа в качестве параметра, используйте шаблон.
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);
Очень просто:
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);
Я знаю, что на этот пост есть ответ, но все же у меня была проблема с этим, и я нашел простой способ ответов на этой странице. Вы можете передать имя типа любой функции следующим образом:
template<typename T>
void function_name()
{
//you can access your type here with T
//you can create an object from T or anything you want
//for example :
T obj;
//or:
T obj=new T;
}
int main(){
function_name<YourTypeName>();
}
После компиляции вашей программы нет таких вещей, как типы. Это стиль C++.