Loading...
zzerro avatar zzerro 16 Точки

Шаблон за променливи или име на променлива?

Здравей, Живко!

В 00:42:10 - 00 42:30 от видеото "Exercise: Advanced Class Members and Code Organization"/21.1.2019 обясняваш, че

Това Naming е името на променливата... име на променливата и нищо друго...

Значи, имаме някаква променлива(Naming??) и ето (с??) този синтаксис тип на променливата (e??) translator...

От казаното се разбира, че името на променливата е Naming, a типът на променливата е translator. В предишното видео пак говореше същото(ако искаш, ще го прегледам наново, за да намеря къде точно?). Наистина ли с typename се създават променливи или аз не съм те разбрал?

0
C++ Advanced 23/01/2020 00:16:05
Filipbg avatar Filipbg 26 Точки

"Naming" си е обикновено име на template-a. Просто така е кръстено. Това е начина да адресираш (достъпваш) мембърите в класа чрез темплейта. Същото нещо както при namespace-овете. Само че вместо с ::, просто < > в началото. Поне аз така ги разбирам нещата и ми изглеждат ясни.

1
23/01/2020 18:22:57
zzerro avatar zzerro 16 Точки

...Същото нещо както при namespace-овете...

По-скоро същото като class - създаваш тип за променливи.

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, колега,

Благодаря ти, че питаш пояснителен въпрос и се извинявам, ако не съм успял да предам информацията по най-точния начин.

Ще си позволя да цитирам, колегата Filipbg, защото отлично е адресирал въпроса ти.
"Naming" си е обикновено име на template-a. Просто така е кръстено. Това е начина да адресираш (достъпваш) мембърите в класа чрез темплейта.

От горенаписаното изречение става ясно, че това "Naming" изпълнява 2 роли.
1) Име на template-a
2) Начин за адресиране на променлинвата от тип template

Давам пример

template < typename Naming>
struct MyStruct {
  MyStruct(Naming input) {
    variable = input;
  }  

  Naming variable;
};

int main() {
  MyStruct<int> intStruct(3);
  MyStruct<double> doubleStruct(3.14);

  std::cout <<  intStruct.variable; //достъпваме и принтираме int променливата "3"
  std::cout <<  doubleStruct.variable; //достъпваме и принтираме double променливата "3.14"

  return 0;
}

Сега си представи, че структурата кода за MyStruct най-отгоре го заменя ето с този код
template < typename T>
struct MyStruct {
  MyStruct(T input) {
    variable = input;
  }  

  T variable;
};

Програмата е едно към едно с горната. Единствено, което сменихме е името на template-а, а именно от "Naming" на "T".

Поздрави

0
zzerro avatar zzerro 16 Точки

Ами да:

"Naming" си е обикновено име на template-a. Просто така е кръстено.

шаблоните също имат имена, но не са имена на променливи!

Можеш ли да кажеш нещо за typeid - как да проверим какво* произвежда ИМЕТО НА ШАБЛОНА?

*променливи от какъв тип

0
WasteOfRAM avatar WasteOfRAM 5 Точки

Пусни си този код и ще видиш.

 

#include <iostream>
#include <string>
#include <typeinfo>
#include <vector>
#include <list>
#include <map>

template<typename Naming>
void print(Naming& var)
{
	std::cout << typeid(Naming).name() << std::endl << std::endl;
}


int main()
{
	int i = 10;
	std::string str = "String";
	double d = 15;
	std::vector<int> vec;
	std::vector<std::string> vecStr;
	std::map<float, long> map;
	std::list<std::map<std::string, std::vector<const char*>>> nonsense;

	print(i);
	print(str);
	print(d);
	print(vec);
	print(vecStr);
	print(map);
	print(nonsense);
	
	std::cin.get();
	return 0;
}

"Naming" е каквото си поискаш. Каквото му подадеш това ще бъде. Не произвежда нищо просто го поставяш за да знае програмата че там очаква тип и ако го разпознае като тип и може да извърши операциите който си му задал ще ги изпълни.

Представи си го на лист хартия и на всякъде кадето пише "Naming" вместо това пише много точки "................". На точките с химикал си попълни какъв тип искаш.

1
zzerro avatar zzerro 16 Точки

...на всякъде кадето пише "Naming" вместо това пише много точки "................". На точките с химикал си попълни какъв тип искаш.

ето защо може да е каквото и да е, само и само не може да е променлива. Променливите винаги съдържат СТОЙНОСТ (ако не я инициализираш изрично, тя ще бъде случайна; но непременно през името на променливата  ще достъпим някаква стойност).

Имената на шаблоните не съдържат никаква стойност, също както и имената на класовете. С тях се създават променливи (създаваните от класове променливи наричаме "обекти").

Досега в курсовете се случваше лекторът да обърка "клас" с "обект" и аз мислех, че е грешка на езика. Не исках да издребнявам, макар че се обърквам и не мога да разбера какво говори. Сега разбирам, че не е грешка в бързината, а нещо друго... Явно си прав - не трябва да слушам внимателно, а да гледам да реша задачите...

0
28/01/2020 00:14:34
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.