Войти
ФлеймФорумОбщее

Вопросы (669 стр)

Страницы: 1668 669 670 671791 Следующая »
#10020
8:54, 17 июня 2019

Не все драйверы одинаково полезны.


#10021
9:15, 17 июня 2019

Doctor_Bro.
Это единственный драйвер, который ставит мне программа видеокарты.

#10022
10:18, 17 июня 2019

Крестовопрос - что мешало разработчикам стандарта сделать шаблоны имплементируемыми в cpp файлах?
Чтоб вся эта мешанина не торчала в хидерах.

#10023
(Правка: 10:20) 10:19, 17 июня 2019

nes
Устройство компилятора.
Ты можешь объявить шаблоны в .h, а реализовать уже в .cpp только для заранее известных типов.

#10024
10:22, 17 июня 2019

Vlad2001_MFS
>Устройство компилятора.
Какого компилятора?
В стандарте крестов где-то оговаривается оно?

#10025
(Правка: 10:24) 10:23, 17 июня 2019

nes
Ты можешь объявить шаблоны в .h, а реализовать уже в .cpp только для заранее известных типов.

Что-то вроде этого:

// file.h
template<typename T> void func(T value);

// file.cpp

template<typename T> void func(T value) { ... }

template void func<int>(int value);
template void func<float>(int value);
template void func<double>(int value);

https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl

#10026
10:27, 17 июня 2019

Vlad2001_MFS
Бесполезный костыль, убивающий практически всю суть шаблонизации.
Я в курсе про него.

#10027
10:40, 17 июня 2019

nes
Суть в том, что ты не копипастишь алгоритм. Нормальный костыль, делает то, что нужно.

#10028
10:41, 17 июня 2019

1 frag / 2 deaths
И имплементируется мильен раз, везде, где подключишь...

#10029
10:53, 17 июня 2019

nes
> Крестовопрос - что мешало разработчикам стандарта сделать шаблоны
> имплементируемыми в cpp файлах?
То же, что мешало наследоваться от неизвестных типов, содержать в объекте инстанс неизвестного типа... Производительность.
В С++ решили, что производительность и возможность оптимизации - это важно, поэтому работа с памятью реализована очень эффективно. Но есть ряд ограничений: компилятору часто нужно знать размер объекта (а также некоторые характеристики типа наличия нетривиальных конструкторов и  виртуальной таблицы) в момент генерации кода. Линкер такие вещи делать не умеет, поэтому нельзя сгенерировать какой-то фейковый темплейтный код без привязки к типу (и размеру объекта) и передать линкеру, чтобы он сам разруливал, что это такое и как это использовать. Линкер ожидает готовые функции.

#10030
(Правка: 10:56) 10:55, 17 июня 2019

PANDA
>То же, что мешало наследоваться от неизвестных типов, содержать в объекте инстанс неизвестного типа... Производительность.
А при чем тут неизвестные типы?
Линкеру будут доступны все типы на этапе линковки, разве нет?

#10031
11:00, 17 июня 2019

nes
линкер работает с готовыми функциями и всякими глобальными переменными, а не с типами, он не может генерировать код, он только соединяет вызовы с реализациями, когда они в разных объектных файлах

#10032
(Правка: 11:12) 11:10, 17 июня 2019

Формально, с++98 позволял это, и даже был один компилятор, который это поддерживал
Но у этой фичи есть некоторые проблемы и в с++11 выпилили
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1426.pdf

#10033
11:16, 17 июня 2019

PANDA
Не вижу принципиальных отличий в линковке какой-нибудь Foo<int>() и просто Foo().

#10034
(Правка: 11:29) 11:29, 17 июня 2019

nes
> Не вижу принципиальных отличий в линковке какой-нибудь Foo<int>() и просто
> Foo().
принципиальных различий и нет, если реализация этой специализации где-то сгенерирована

Страницы: 1668 669 670 671791 Следующая »
ФлеймФорумОбщее