Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для FireNovel
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297

Шаблоны template с ограниченными параметрами

19.09.2012, 12:45. Показов 5231. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. У меня короткий вопрос.
например есть такой код:
C++
1
2
3
4
template <class T>
class MyVec {
    std::vector<T> m_vec;
};
Возможно ли сделать так чтобы MyVec работал только с определенными классами.
То есть, параметр шаблона T мог принимать только определенные мною значения (например MyClass1, int и всё, другие нельзя).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2012, 12:45
Ответы с готовыми решениями:

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Как вы применяете шаблоны template в C++?
Доброе утро! В C#, которым пользуюсь, есть возможность подстановки типа в класс. В C++ есть более широкое понятие о шаблонах. Какие есть...

Шаблоны типа template<class T*>
Здравствуйте, объясните пожалуйста, что означает сия запись: template&lt;class T*&gt;. И означает ли она, что я далее смогу использовать только...

41
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.09.2012, 16:35
Студворк — интернет-сервис помощи студентам
Как-то так если с относительно понятными ошибками.

C++
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
29
30
31
32
33
34
35
template<bool>
struct CompileCheck { CompileCheck(...); };
 
template<>
struct CompileCheck<false>
{
};
 
#define STATIC_ASSERT(value, message) \
class ERROR_##message { };\
enum { _##message = sizeof((CompileCheck<(value) != 0>(ERROR_##message()))) };
 
template<typename T, typename U>
struct is_same
{
   static const bool value = false;
};
 
template<typename T>
struct is_same<T, T>
{
   static const bool value = true;
};
 
template<typename T>
class Vector
{
  STATIC_ASSERT((is_same<T, double>::value || is_same<T, int>::value), INT_AND_DOUBLE_ONLY)
};
 
int main()
{
   Vector<int> v;
   Vector<long> vv;
}
static_assert взят почти целиком из Александреску
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
19.09.2012, 17:04
Лучший ответ Сообщение было отмечено как решение

Решение

Можно еще и потребовать, чтобы в классе обязательно была реализована определенная функция:
C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
using namespace std;
 
template<bool>
struct CompileCheck { CompileCheck(...); };
 
template<>
struct CompileCheck<false>
{
};
 
#define STATIC_ASSERT(value, message) \
class ERROR_##message { };\
enum { _##message = sizeof((CompileCheck<(value) != 0>(ERROR_##message()))) };
 
template<typename T, typename U>
struct is_same
{
   static const bool value = false;
};
 
template<typename T>
struct is_same<T, T>
{
   static const bool value = true;
};
 
template<class T> struct has_member_Func;
 
template<class R, class C> class has_member_Func<R C::*>
{
    template<R C::*> struct helper;
    template<class T> static char check(helper<&T::Func>*);
    template<class T> static char (&check(...))[2];
public:
    enum { value = sizeof(check<C>(0)) == 1 };
};
 
// Тестовые классы:
 
class A
{
};
 
class B
{
public:
    void Func(B&);
};
 
struct C
{
public:
    void AnotherFunc(C&);
};
 
 
int main()
{
    STATIC_ASSERT(has_member_Func<void (A::*)(A&)>::value, CLASS_A_HASNT_MEMBER_FUNCTION_FUNC);
    STATIC_ASSERT(has_member_Func<void (B::*)(B&)>::value, CLASS_B_HASNT_MEMBER_FUNCTION_FUNC);
    STATIC_ASSERT(has_member_Func<void (C::*)(C&)>::value, CLASS_C_HASNT_MEMBER_FUNCTION_FUNC);
    return 0;
}
6
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2012, 17:04

подскажите template<class> (Шаблоны и указатели)
circl.h #ifndef _CIRCL_H #define _CIRCL_H template &lt;class t&gt; class circl{ private: circl *pNext,*pBack; public: t...

Что за пустые шаблоны template <> struct/inline?
что за пустые шаблоны template &lt;&gt; за которыми следуют class/struct/inline? По многочисленным источникам в c++ шаблоны имеют вид,...

Шаблоны: ошибки: requires template argument list или undeclared identifier
Есть маленький тестовый проект из 4-файлов. Что мне надо - рассказывать словами замучаюсь, взляните пожалуйста на код по ссылке ниже (он...

Genfit() с ограниченными параметрами
Здравствуйте, я пытаюсь фитировать экпериментальные точки к некой фукнции с помощью genfit(). Эта функция зависит от нескольких параметров...

Template Toolkit шаблоны
Всем привет я новичек в Perl, поэтому вопрос может быть довольно глупый, не отсылайте плиз читать мануалы) вот код из русской...


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

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 30.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 28.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 28.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru