Я знаю, что заголовок отстой, просто я не был уверен, как еще спросить об этом, потому что мне не хватает знаний по многим базовым c C ++ функциям, и я пытаюсь обратиться к ним один за другим .
Итак, я начинаю погружаться в шаблоны C ++. Сейчас я создаю действительно базовые c, просто чтобы помочь мне отладить мой код, например:
void printVectors(const T& vec, const S& vec2) {
for (int i = 0; i < vec.size(); i++) {
print("------------");
printNoEndln(vec[i]);
printNoEndln("->");
print(vec2[i]);
}
}
Теперь, начиная с SDL, я наткнулся на что-то вроде этого:
template <typename T, typename... TArgs>
T& AddComponent(TArgs&&... args) {
T* newComponent(new T(std::forward<TArgs>(args)...));
newComponent->componentName = typeid(T).name();
newComponent->owner = this;
components.emplace_back(newComponent);
newComponent->Init();
return *newComponent;
}
Итак, я построчно опишу, что я понимаю, этой строкой, и я был бы очень рад, если бы вы, ребята, могли меня поправить.
1- Создание шаблона типа T с N аргументы (То, что здесь означает оператор распространения, верно? Он объявляет шаблон c variadi?)
2 - Объявление функции AddComponent
, которая возвращает ссылку на T и получает N ссылок на ссылки Тип TArgs (???) (Эта часть меня действительно смущает).
3 - Объявление указателя T на новый объект типа T очень странным образом. Для начала, я не понимаю, почему к экземпляру newComponent
обращаются с помощью ()
, например newComponent()
вместо T* newComponent = new Component(...)
(Серьезно, это все, что я могу извлечь asp из этой строки)
От строки 4 и далее код очень прост для меня и не нуждается в объяснении.
Из того, что я мог понять, мой пробел не в состоянии понять: шаблоны * variadi c и функции, значения, lvalues и проблема вперед. Это верно? Ребята, можете ли вы указать мне полезные статьи на эти темы? Я нахожу большинство cpp ссылок очень формальными и далеко за пределами моей лиги. Забавно, что я могу читать документацию C#, Java, Typescript и Javascript без проблем, но когда дело доходит до C ++, становится действительно сложно извлечь что-то из документации. Обычно я просто пропускаю формальность к действительному примеру кода, а затем сам пробую его на компиляторе, чтобы понять, что происходит.
Я знаю, что это много, отвечайте любой информацией, которую вы считаете полезной.
Спасибо, ребята