Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 07.12.2016
Сообщений: 26
1

Специализация шаблонного класса

07.12.2016, 15:22. Просмотров 926. Ответов 8
Метки нет (Все метки)

Здравствуйте !

Задача: нужно "вытянуть" тип переменной из списка аргументов конструктора (см. текст).
Возможно ли, вообще, такое ? Спасибо.
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
#include <cstdio>
 
using namespace std;
 
template <typename T> class MyObj
{
        public:
        T &OuterVal;
        MyObj(T &Val): OuterVal(T(Val)) {};
};
 
void main()
{
        //Тип этих переменных известен уже на этапе препроцессинга
        int i;
        double d;
        //однако, при создании объекта, нужно явно задать тип специализации.
        //Задача: нужно "вытянуть" тип переменной из списка аргументов конструктора
        //чтобы можно было писать вместо:
        MyObj<int> obj(i);
        MyObj<double> obj2(d);
        //что-то вроде этого:
        MyObj<typeof(i)> obj(i);
        MyObj<typeof(d)> obj2(d);
        //А в идеале, используя макроподстановку:
        MyObj obj(i);
        MyObj obj2(d);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2016, 15:22
Ответы с готовыми решениями:

Явная специализация шаблонного класса
Всем привет, не могу разобраться с определением функций-членов для явной специализации Имеем след....

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

Вызов метода у шаблонного поля, шаблонного класса
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

8
6909 / 5974 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
07.12.2016, 15:28 2
А для чего это нужно? Просто упростить запись?
0
1 / 1 / 1
Регистрация: 07.12.2016
Сообщений: 26
07.12.2016, 15:38  [ТС] 3
Задача дана в абстрактном виде и ответ - да. Но, вообще, объект нужен для перегрузки оператора >>,
для контроля корректности ввода пользователя. Согласитесь, что писать каждый раз:
C++
1
cin >> Correct<int>(i);
надоест смотреть какого там типа у меня i, j, k, d...
0
Любитель чаепитий
3475 / 1593 / 496
Регистрация: 24.08.2014
Сообщений: 5,498
Записей в блоге: 1
07.12.2016, 15:39 4
Лучший ответ Сообщение было отмечено UnKaiF как решение

Решение

Цитата Сообщение от UnKaiF Посмотреть сообщение
Возможно ли, вообще, такое ?
В с++17 будет возможно. Пока что нет.

Добавлено через 1 минуту
Цитата Сообщение от UnKaiF Посмотреть сообщение
надоест смотреть какого там типа у меня i, j, k, d...
C++
1
cin >> Correct<decltype(i)>(i);
Начиная с с++11.
0
1 / 1 / 1
Регистрация: 07.12.2016
Сообщений: 26
07.12.2016, 15:43  [ТС] 5
Нужно С++ builder 6
0
Эксперт С++
8178 / 3775 / 815
Регистрация: 15.11.2014
Сообщений: 8,587
07.12.2016, 16:10 6
Цитата Сообщение от UnKaiF Посмотреть сообщение
//что-то вроде этого:
* * * * MyObj<typeof(i)> obj(i);
* * * * MyObj<typeof(d)> obj2(d);
C++
1
MyObj<decltype(i)> obj(i);
0
nmcf
07.12.2016, 20:32
  #7

Не по теме:

Цитата Сообщение от UnKaiF Посмотреть сообщение
Нужно С++ builder 6
Ну хорошо, что не для DOS. :)

0
1 / 1 / 1
Регистрация: 07.12.2016
Сообщений: 26
07.12.2016, 22:57  [ТС] 8
Курс у нас называется "Основы... в С++ builder". Но, вроде как, консольное можно и на Visual выполнить.
decltype так decltype. Всем спасибо.
0
Эксперт С++
4962 / 3068 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
08.12.2016, 00:20 9
Дело в том, что параметр шаблона не обязательно должен быть типом параметра конструктора. Шаблонный параметр может использоваться где угодно, не только в качестве параметра конструктора классового типа.
Компилятор делает то, что говорит стандарт. В своё время, стандарт тщательно продумывается.
Прочтите эту статью.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2016, 00:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

Чем отличается шаблонный метод класса от шаблонного класса?
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок...

Специализация шаблона класса
Имеется задание: Создать свой шаблонный класс – динамический массив (myvector). Создать методы...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.