-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lab4 #3
base: master
Are you sure you want to change the base?
Lab4 #3
Conversation
доброго времени суток, я сейчас пока писал третью задачу столкнулся с одной "забавной" проблемой: при обобщении функций я хотел сделать частичную специализацию, но, судя по всему, это почему-то запрещено.. я из-за этого сделал метод clear и erase не с полной "зачисткой" полей, а только уменьшение количества, чтобы мы могли просто перезаписывать поля как ненужные, но это выглядит будто какой-то костыль, правильно ли это? можно ли сделать это как-то иначе? |
Частичная специализаций функций запрещена стандартом. В отличие от типа (структуры, класса) функцию (в том числе шаблонную) можно перегрузить - предполагается, что это покрывает все нужды, которые для типов покрывает частичная специализация, поэтому для функций она не нужна. Я не понял, как это обстоятельство помешало вам реализовать clear и erase. Никаких проблем быть не должно. |
Посмотрел ваш код 1-й задачи, вы имеете в виду, вот это не можете реализовать на шаблонах?
Не вижу проблем:
|
оу, и вправду можно было просто сделать вот так, спасибо! |
lab4/Tuple.h
Outdated
|
||
template <std::size_t I = 0, typename... TupleT> | ||
typename std::enable_if<(I < sizeof...(TupleT)), void>::type | ||
printElem(std::tuple<TupleT...> tt, std::ostream& os) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тапл по значению передаете! Почти 4 месяца С++ учим, а вы все еще не привыкли?
lab4/Parser.h
Outdated
addData(arr, str); | ||
} else { | ||
std::tuple<TupleT...> clear; | ||
arr = clear; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Эквивалентно arr = std::tuple<TupleT...>();
lab4/Parser.h
Outdated
template <typename... TupleT> | ||
class CsvParser { | ||
static std::tuple<TupleT...> arr; | ||
static std::ifstream* input; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нельзя, невозможно создать несколько экземпляров CsvParser'а одновременно.
lab4/Parser.h
Outdated
} else { | ||
std::tuple<TupleT...> clear; | ||
arr = clear; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
копипаста с оператора++
No description provided.