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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
19.09.2012, 12:45     Шаблоны template с ограниченными параметрами #1
Привет всем. У меня короткий вопрос.
например есть такой код:
C++
1
2
3
4
template <class T>
class MyVec {
    std::vector<T> m_vec;
};
Возможно ли сделать так чтобы MyVec работал только с определенными классами.
То есть, параметр шаблона T мог принимать только определенные мною значения (например MyClass1, int и всё, другие нельзя).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.09.2012, 16:35     Шаблоны template с ограниченными параметрами #41
Как-то так если с относительно понятными ошибками.

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 взят почти целиком из Александреску
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2012, 17:04     Шаблоны template с ограниченными параметрами
Еще ссылки по теме:

Ошибка компиляции: template-id does not match any template declaration C++
Что за пустые шаблоны template <> struct/inline? C++
'MyQueue' : use of class template requires template argument list C++

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
19.09.2012, 17:04     Шаблоны template с ограниченными параметрами #42
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Можно еще и потребовать, чтобы в классе обязательно была реализована определенная функция:
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;
}
Yandex
Объявления
19.09.2012, 17:04     Шаблоны template с ограниченными параметрами
Ответ Создать тему
Опции темы

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