Форум программистов, компьютерный форум CyberForum.ru

Шаблоны С++ - C++

Восстановить пароль Регистрация
 
DrMGC
 Аватар для DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
27.09.2013, 15:23     Шаблоны С++ #1
C++
1
2
3
4
template <typename T_sizeCapacity> class SomeClass {
public:
    T_sizeCacity size;
};
Как сделать чтобы T_sizeCapacity мог быть только числовым типом?
PS нормальный заголовок не смог придумать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 15:23     Шаблоны С++
Посмотрите здесь:

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». C++
C++ шаблоны в си++
C++ Шаблоны
Шаблоны С++ C++
Шаблоны C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 15:34     Шаблоны С++ #2
DrMGC, а можешь как-то обосновать необходимость этого? Мне просто слабо представляется, какой класс может заставить делать подобный шаблон?

И потом, что такое "числовой тип"?
int это "числовой"?
а double это какой тогда? Тоже числовой, конечно!
а char разве не числовой?
а std::string чем хуже вышеперечисленных?
DrMGC
 Аватар для DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
27.09.2013, 15:40  [ТС]     Шаблоны С++ #3
Kuzia domovenok,
C++
1
2
3
4
5
6
7
8
9
template<typename T_SizeCapacity, typename T_Value>
class Array {
public:
    Array();
    ~Array();
    
    T_SizeCapacity size;
    T_Value *pValue;
};
Т.е. чтобы можно было указать какой предел массива
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 15:48     Шаблоны С++ #4
DrMGC, да, я сразу заподозрил, что ты мутишь обёртку над массивом... и что?
Указывай тип size_t! Какой ещё тип может подходить на эту роль? Другого тут быть просто не может.
Зачем тут нужен шаблонный тип для размера массива?
C++
1
2
3
4
5
6
7
8
9
template<typename T_Value>
class Array {
public:
    Array();
    ~Array();
    
    size_t size;
    T_Value *pValue;
};
Добавлено через 3 минуты
Сам посуди, какой ещё разрешено указывать тип, кроме size_t ???
Ну разрешишь ты создать по шаблону int size;
а юзер возьмёт и введёт отрицательный размер.
или создаст по шаблону массив с размером double
]

Короче, ни один тип, кроме size_t на этом месте стоять не может. Зачем тогда шаблонить его?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
27.09.2013, 15:58     Шаблоны С++ #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Короче, ни один тип, кроме size_t на этом месте стоять не может. Зачем тогда шаблонить его?
Похоже затем же, зачем в std::array это сделали.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 16:04     Шаблоны С++ #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Похоже затем же, зачем в std::array это сделали.
неужели? где же?
Kastaneda, тебе не кажется странным, что у автора <typename T_SizeCapacity>
а в std::array прописано <size_t N >?

Добавлено через 1 минуту
b gjnjv? 'nj abxf yt bp C++? f bp uh`,fyyjuj C++11
Jupiter
27.09.2013, 16:53
  #7

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
f bp uh`,fyyjuj C++11
слив засчитан

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 16:57     Шаблоны С++ #8
Цитата Сообщение от Jupiter Посмотреть сообщение
слив засчитан
Поддерживаешь Kastaneda?
Дубль два.
А тебе не кажется странным, что у автора <typename T_SizeCapacity>
а в std::array прописано <size_t N >?
А значит Kastaneda соответственно не совсем по теме ответил?
Jupiter
27.09.2013, 16:59
  #9

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Поддерживаешь Kastaneda?
нет
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А тебе не кажется странным
кажется, но не вижу повода поминать тут c++11

DrMGC
 Аватар для DrMGC
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 83
27.09.2013, 17:07  [ТС]     Шаблоны С++ #10
я использую C++11
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.09.2013, 17:11     Шаблоны С++ #11
Могу предложить сделать так:
C++
1
2
3
4
5
6
template<typename T>
class A
{
public:
   A() {static_assert(std::is_integral<T>::value, "must be integral");}
};
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 17:20     Шаблоны С++ #12
DiffEreD, извиняюсь, что похоже совсем раздуваю тему своими постами, но не могу молчать!
Вопросов море:
Зачем автору такого рода шаблон?
Что даст эта проверка? Отрицательные числа она пропустит, придётся их отсекать отдельным условием.
Длинные числа она тоже пропустит. Придётся ещё условие вставлять.
и что у нас останется после этого????
Единственный тип, описывающий размер массива это size_t!!! Так зачем, зачем, зачем??? делать по-другому?
оператор new[] определён как
C++
1
operator new[] (std::size_t size)
Так зачем использовать какой-либо другой тип в качестве аргумента шаблона, если он всегда будет приводиться к size_t?
Kastaneda
27.09.2013, 17:24
  #13

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А тебе не кажется странным, что у автора <typename T_SizeCapacity>
а в std::array прописано <size_t N >?
А значит Kastaneda соответственно не совсем по теме ответил?
да, да, я похоже не совсем въехал.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2013, 18:03     Шаблоны С++
Еще ссылки по теме:

C++ Шаблоны и т.д.(
Шаблоны C++
Шаблоны C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.09.2013, 18:03     Шаблоны С++ #14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
оператор new[] определён как
C++
1
operator new[] (std::size_t size)
несмотря на это, никто не запрещает написать нечто такое:
C++
1
int* p = new int[-1];
и получить фейл этапа выполнения.
Yandex
Объявления
27.09.2013, 18:03     Шаблоны С++
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru