Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Как явно специализировать шаблонный конструктор? Что-то вроде этого, но рабочее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 18:10 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Точнее не специализировать, а явно вызвать с шаблонным параметром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 18:19 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
специализировать шаблонный конст, Явно специализировать можно так: Код: plaintext 1. Только это должно быть за пределами функций, там, где разрешено объявлять тело метода. Но что-то мне подсказывает, что вы имели в виду не "явно специализировать", а "явно инстанцировать". В этом случае ответ: конструктор нельзя явно инстанцировать, можно только неявно, через выведение типов из аргументов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 18:30 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyспециализировать шаблонный конст, Явно специализировать можно так: Код: plaintext 1. Только это должно быть за пределами функций, там, где разрешено объявлять тело метода. Но что-то мне подсказывает, что вы имели в виду не "явно специализировать", а "явно инстанцировать". В этом случае ответ: конструктор нельзя явно инстанцировать, можно только неявно, через выведение типов из аргументов. Да, хотел явно инстанцировать. С выведением типов-параметров шаблонов все понятно, а бывает выведение значений-параметров шаблонов (template<int _a>) и как это выглядит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 18:47 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцироватьа бывает выведение значений-параметров шаблонов (template<int _a>) и как это выглядит? Например вывести из размера массива: Код: plaintext 1. 2. 3. 4. 5. 6. вместо size_t можно и int, т.к. размер массива неявно кастится к int. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 19:04 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyинстанцироватьа бывает выведение значений-параметров шаблонов (template<int _a>) и как это выглядит? Например вывести из размера массива: Код: plaintext 1. 2. 3. 4. 5. 6. вместо size_t можно и int, т.к. размер массива неявно кастится к int. Ясно. А других вариантов нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 19:06 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцироватьА других вариантов нет? Почему же. Выводить можно из любых типов, где значение является параметром шаблона или размером массива. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 19:12 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyинстанцироватьА других вариантов нет? Почему же. Выводить можно из любых типов, где значение является параметром шаблона или размером массива. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А может есть подобная пустая структура в std/boost, допустим имя которой явно говорит о том, что она передается исключительно для явного инстанцирования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 21:05 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцироватьА может есть подобная пустая структура в std/boost, допустим имя которой явно говорит о том, что она передается исключительно для явного инстанцирования? Это никому не надо просто. Шаблонные конструкторы нужны только для выведения типов. Если вам надо явное инстанцирование, используйте шаблон класса, а не конструктора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 21:56 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyинстанцироватьА может есть подобная пустая структура в std/boost, допустим имя которой явно говорит о том, что она передается исключительно для явного инстанцирования? Это никому не надо просто. Шаблонные конструкторы нужны только для выведения типов. Если вам надо явное инстанцирование, используйте шаблон класса, а не конструктора Допустим нужен обязательно template <int N>, т.к. N - всегда constexpr. Если я буду делать шаблон класса, то для работы с разными специализациями, как с одним классом нужен будет полиморфизм. А если делать через шаблон конструктора, то это всегда один класс. Собственно вопрос что из этого менее громоздко, полиморфизм или такое инстанцирование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 22:55 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцировать, Вы так спрашиваете как будто у вас есть выбор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 02:24 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyинстанцировать, Вы так спрашиваете как будто у вас есть выбор :) Не понял намека :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 02:34 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцировать, Какие намеки. Мы ж только что выяснили что явно инстанцировать конструктор не получится. Значит остается инстанцирование класса и полиморфизм для работы со всеми возможными инстанцированными классами из одного кода. Хотя во многих случаях динамический полиморфизм вполне можно заменить на шаблонный. Т.е. там где вы в методе могли бы принимать параметром ссылку на базовый класс, вместо этого сделать метод шаблонным с выведением типа из фактического параметра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 02:41 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyинстанцировать, Какие намеки. Мы ж только что выяснили что явно инстанцировать конструктор не получится. Значит остается инстанцирование класса и полиморфизм для работы со всеми возможными инстанцированными классами из одного кода. Хотя во многих случаях динамический полиморфизм вполне можно заменить на шаблонный. Т.е. там где вы в методе могли бы принимать параметром ссылку на базовый класс, вместо этого сделать метод шаблонным с выведением типа из фактического параметра. Так вы же показали, что можно вот так явно инстанцировать конструтор: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Но 1. почему то ничего не выводится на экран 2. если раскоментировать последнюю строчку, то возникает ошибка компиляции: автор24:25: error: request for member 'n' in 't', which is of non-class type 'T(inst<5u> (*)())' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 16:01 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцироватьТак вы же показали, что можно вот так явно инстанцировать конструтор: Код: plaintext 1. Я уже сам запутался. Это не явное, а неявное инстанцирование. Явное делается через указание template (без <>) и инстанцированного прототипа шаблонной функции / инстанцированной декларации шаблонного класса. То что я выше назвал явной специализацией - это на самом деле явное инстанцирование: Код: plaintext 1. 2. 3. 4. А неявное инстанцирование - это инстанцирование по месту использования шаблона. Код: plaintext 1. 2. Специализация же не бывает явной или неявной, а бывает просто специализация, и делается через указание template (с <>) и тела шаблона. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. По поводу ошибки - сорри нет времени разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 16:59 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
А, с ошибкой все просто :) T t(inst<5>()) - это видимо расценивается компилятором не как создание экземпляра T, а декларация прототипа функции f возвращающей T и принимающей указатель на функцию без аргументов возвращающую inst<5>. Объявите значение передаваемое в конструктор отдельной переменнной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 17:24 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА, с ошибкой все просто :) T t(inst<5>()) - это видимо расценивается компилятором не как создание экземпляра T, а декларация прототипа функции f возвращающей T и принимающей указатель на функцию без аргументов возвращающую inst<5>. Объявите значение передаваемое в конструктор отдельной переменнной. Как хитро все закручено :) Да, так работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 17:30 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyСпециализация же не бывает явной или неявной, а бывает просто специализация, и делается через указание template (с <>) и тела шаблона. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. А почему не проходит такая специализация и инстанцирование при передаче шаблонного класса в параметр шаблона? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. автор16:34: error: no matching function for call to 'func()' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 20:30 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
инстанцировать, Скорее всего потому что std::vector не соответствует декларации template<typename> class T. Насколько я помню там не один параметр, а несколько (как минимум аллокатор еще) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 21:45 |
|
||
|
Как явно специализировать шаблонный конструктор?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyинстанцировать, Скорее всего потому что std::vector не соответствует декларации template<typename> class T. Насколько я помню там не один параметр, а несколько (как минимум аллокатор еще) Да. http://www.cplusplus.com/reference/vector/vector/] http://www.cplusplus.com/reference/vector/vector/ авторtemplate < class T, class Alloc = allocator<T> > class vector; // generic template Вариадические шаблоны спасают, работает :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Иначе нужен такой финт ушами, обязательно точно количество параметров и обязательно самому аллокатор указывать чтоб работало: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 23:07 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38109787&tid=2020522]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 293ms |

| 0 / 0 |
