Size: a a a

2021 February 25

SH

Serhii Herashchenko in supapro.cxx
Nastya Medveda
```
template <typename T>
MyClass<T>::MyClass(T xx)

{
...
};
```
Какая логика в том, чтоб указывать  тип <T> в первой части, в не во второй?
Потому, что после :: начинается пространство имени того, что стоит до этого
источник

NM

Nastya Medveda in supapro.cxx
Constantine Drozdov
имя класса MyClass<T>, у него метод MyClass(T)
А, поняла, мы явно указываем что это темплейт класса, а не метода.
источник

CD

Constantine Drozdov in supapro.cxx
Nastya Medveda
А, поняла, мы явно указываем что это темплейт класса, а не метода.
Шаблон класса вообще следует воспринимать как неделимое имя
источник

CD

Constantine Drozdov in supapro.cxx
vector<int> и vector<bool> имеют полностью разную реализацию
источник

CD

Constantine Drozdov in supapro.cxx
если хотите, можете считать, что vector это отображение типа T в уникальный тип, который называется vector<T>
источник

MK

Mikhail Kalugin in supapro.cxx
Constantine Drozdov
если хотите, можете считать, что vector это отображение типа T в уникальный тип, который называется vector<T>
Вообще, это и есть инстанцирование. Оно ленивое и в зависимости от типа могут быть созданы классы с разными методами.
источник

CD

Constantine Drozdov in supapro.cxx
Mikhail Kalugin
Вообще, это и есть инстанцирование. Оно ленивое и в зависимости от типа могут быть созданы классы с разными методами.
Ленивое оно или нет, это в gcc вроде от -O зависит :)
источник

NM

Nastya Medveda in supapro.cxx
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
источник

CD

Constantine Drozdov in supapro.cxx
Nastya Medveda
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
Ну читайте std::any, только в этом нет смысла
источник

CD

Constantine Drozdov in supapro.cxx
Это стиль программирования на другом языке
источник

D

Danya in supapro.cxx
Nastya Medveda
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
Использовать std::any или std::variant
источник

SH

Serhii Herashchenko in supapro.cxx
Nastya Medveda
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
Может
источник

SH

Serhii Herashchenko in supapro.cxx
Читай deduction guides c++ 17
источник

SS

Sergey Sobolev in supapro.cxx
Nastya Medveda
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
Очевидно, что вы должны знать структуру данных, с которым собираетесь работать, это даже в динамических языках так. Иначе в таком типе нет никакого смысла
источник

SS

Sergey Sobolev in supapro.cxx
Serhii Herashchenko
Читай deduction guides c++ 17
Вопрос был про рантайм значение все же
источник

MK

Mikhail Kalugin in supapro.cxx
Sergey Sobolev
Очевидно, что вы должны знать структуру данных, с которым собираетесь работать, это даже в динамических языках так. Иначе в таком типе нет никакого смысла
Да, но есть еще магия SFINAE
источник

D

Danya in supapro.cxx
Serhii Herashchenko
Читай deduction guides c++ 17
Не, тут в другом дело
источник

SH

Serhii Herashchenko in supapro.cxx
Nastya Medveda
Очень смущает, что при создании экземпляра класса приходится явно указывать тип
```
MyClass<int> o{ 123 };
```
Но если у меня например, неизвестно, какого типа переменная. Я прочитала CSV и там  на входе внезапно,  был Long Int   или double вместо Int, то как мне тогда создавать шаблон?
И как может быть неизвестно, какого типа переменная?)
источник

MK

Mikhail Kalugin in supapro.cxx
Constantine Drozdov
Ленивое оно или нет, это в gcc вроде от -O зависит :)
Хм... Он может инстанцировать шаблон до того как стал известен конечный тип?
источник

NM

Nastya Medveda in supapro.cxx
Sergey Sobolev
Очевидно, что вы должны знать структуру данных, с которым собираетесь работать, это даже в динамических языках так. Иначе в таком типе нет никакого смысла
Окей, у тебя есть csv табличка на 100 тысяч строк, тебе ее нужно считать. А там в 3 случайных строках вместо int попал string (кто-то написал вместо "10 000" "10 тыс") и я все равно хочу чтоб моя программа эти данные обрабатывала.
как я должна знать структуру данных в таком случае?
источник