Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 45
1

Создание экземпляра шаблона класса

22.03.2016, 00:34. Показов 5150. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
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
#include <iostream>
#include <string>
#include <vector>
 
//========================================
 
template <typename T> class SomeClass {};
 
void somefunc(SomeClass<char>);                     //1
 
class AnotherClass
{
    SomeClass<double>& a;                           //2
    SomeClass<int> b;                               //3
};
 
 
int main()
{
    SomeClass<long double>* ptr;                    //4
    auto res = sizeof(SomeClass<std::string>);      //5
 
    return 0;
}
Вопрос: в каких строках создается экземпляр шаблона класса?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2016, 00:34
Ответы с готовыми решениями:

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

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

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью...

Создание экземпляра класса до определения класса
Здравствуйте. Решил создать класс Console для более удобного изменения цвета текста, выводимого в...

22
jdzvk
22.03.2016, 02:42     Создание экземпляра шаблона класса
  #21

Не по теме:

м. всякое интересненькое.
специализация шаблона класса может инстанцироваться в некоторой точке программы, и превратится собственно в класс.
при этом по факту, что то становится чем то(классом со специализацией) лишь в контексте, и проявляется действием?

с "инстанцирование методов шаблона класса - процесс независимый от инстанцирования" согласиться трудно.
вне контекста истанцирование происходить не может. вернее может, но это бессмысленно - худшее из возможного.
*типа если ничего не помогло, или требуются элементарные низкоуровневые действия.
-если компилятор не может определить контекст создаваемых объектов, либо это плохой компилятор, либо очень плохая программа?

0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
22.03.2016, 03:08 22
Цитата Сообщение от jdzvk Посмотреть сообщение
с "инстанцирование методов шаблона класса - процесс независимый от инстанцирования" согласиться трудно. вне контекста истанцирование происходить не может.
Ничего не понятно. Инстанциирование всегда происходит в каком-то контексте.

Речь идет о том, что вот в таком случае

C++
1
2
3
4
template <typename T> struct SomeClass
{
  void foo() {}
};
мы фактически имеем дело с двумя относительно независимыми шаблонами: с шаблоном класса template <typename T> struct SomeClass и с шаблоном функции template <typename T> void SomeClass::foo().

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

Именно по этой причине вы можете писать в шаблонах классов "некорректные" определения методов, при условии, что их "некорректность" зависит от параметра шаблона. Инстанциация самого класса не вызывает инстанциации методов. По этой причине некорректность определений методов не будет приводить к ошибкам компиляции. (Пока вы не попытаетесь инстациировать сам метод, например, вызвав его.)

Например, вот такой код является корректным

C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T> struct SomeClass
{
  int foo() { return T::size; }
  int bar() { return 42; }
};
 
int main()
{
    SomeClass<char> c;
    return c.bar();
}
Этот код инстанциирует SomeClass<char> и int SomeClass<char>::bar(), но не int SomeClass<char>::foo(). Поэтому ошибки не возникает.
0
jdzvk
22.03.2016, 03:40     Создание экземпляра шаблона класса
  #23

Не по теме:

ага.
и если вы написали программу, и компилятор(или интерпретатор) ругается на функцию, вы правите функцию.
а если интерпретатор ругается на шаблон класса - вы переделываете всю программу.
*сорри за этот мелкий смешок, но было не удержаться)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2016, 03:40

Создание экземпляра класса
всем доброго времени суток! подскажите такую вещь: есть класс, нужно создать объект этого класса,...

Создание экземпляра класса
Зачем мы пишем первую строку? Matrix это у нас название класса. Matrix theMatrix;...

Создание экземпляра класса из DLL
Привет всем, Подскажите, пожалуйста, как создать экземпляр класса из DLL? В C# это просто...

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


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru