Skip to content
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

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open

Lab4 #3

wants to merge 10 commits into from

Conversation

Pyrokines17
Copy link
Owner

No description provided.

@Pyrokines17 Pyrokines17 requested a review from dsavenko December 11, 2023 14:48
@Pyrokines17
Copy link
Owner Author

доброго времени суток, я сейчас пока писал третью задачу столкнулся с одной "забавной" проблемой: при обобщении функций я хотел сделать частичную специализацию, но, судя по всему, это почему-то запрещено.. я из-за этого сделал метод clear и erase не с полной "зачисткой" полей, а только уменьшение количества, чтобы мы могли просто перезаписывать поля как ненужные, но это выглядит будто какой-то костыль, правильно ли это? можно ли сделать это как-то иначе?

@dsavenko
Copy link
Collaborator

Частичная специализаций функций запрещена стандартом. В отличие от типа (структуры, класса) функцию (в том числе шаблонную) можно перегрузить - предполагается, что это покрывает все нужды, которые для типов покрывает частичная специализация, поэтому для функций она не нужна.

Я не понял, как это обстоятельство помешало вам реализовать clear и erase. Никаких проблем быть не должно.

lab4/FlatMap.h Outdated Show resolved Hide resolved
@dsavenko
Copy link
Collaborator

Посмотрел ваш код 1-й задачи, вы имеете в виду, вот это не можете реализовать на шаблонах?

void FlatMap::clear() { 
    while (count > 0) { 
        map[count - 1].key = "";
        map[count - 1].value = "";

        count--;
    }
}

Не вижу проблем:

void FlatMap::clear() { 
    while (count > 0) { 
        map[count - 1].key = KeyT();
        map[count - 1].value = ValueT();

        count--;
    }
}

@Pyrokines17
Copy link
Owner Author

оу, и вправду можно было просто сделать вот так, спасибо!

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) {
Copy link
Collaborator

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;
Copy link
Collaborator

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;
Copy link
Collaborator

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;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

копипаста с оператора++

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants