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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
#1

Шаблон метода класса - C++

31.10.2013, 09:49. Просмотров 1315. Ответов 16
Метки нет (Все метки)

Здравствуйте, могу ли я создавать шаблоны методов "нешаблонных" классов?
например
C++
1
2
3
4
5
6
7
8
9
class My_class {
public:
template<class Data>
Data function(Data&);
.........................
};
..............
template <class Data>
Data My_class<Data>::function(Data& value) {...}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 09:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон метода класса (C++):

Передача метода класса в качестве параметра для метода другого класса - C++
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...

Вызов метода класса из метода другого класса - C++
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd, bufwr; unsigned char tx_index,...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Шаблон класса, параметром которого должны являться наследники определённого класса - C++
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром которого должны являтся наследники...

Вызов метода производного класса через обращение к методу базового класса - C++
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp, то всё нормально. Если же создавать в...

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка &quot; нестандартный...

16
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
31.10.2013, 09:53 #2
Нет, не можете. В вашем случае, надо перегружать методы.
1
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,126
31.10.2013, 09:55 #3
Да

C++
1
2
3
4
5
6
7
class Example
{
public:
       template< class T >
       void get(T tval)
       { std:: cout << tval << std::endl; }      
};
1
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 09:55  [ТС] #4
Цитата Сообщение от mytilus Посмотреть сообщение
Нет, не можете. В вашем случае, надо перегружать методы.
Жаль. Спасибо
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,126
31.10.2013, 09:57 #5
Нет, не можете.
Не мелите ерунды.
0
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 10:00  [ТС] #6
То есть необходимо писать определение функции сразу же, в классе?
Нельзя просто объявить функцию в классе, а определить её вне класса?
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,126
31.10.2013, 10:02 #7
То есть необходимо писать определение функции сразу же, в классе? Нельзя просто объявить функцию в классе, а определить её вне класса?
Хоть так хоть так роли не играет. Это я написал что бы быстрее.

Добавлено через 1 минуту
Вы про это и так можно
C++
1
2
3
4
5
6
7
8
9
10
class Example
{
public:
       template< class T >
       void get(T tval);    
};
 
template< class T >
void Example::get(T tval)
{ std:: cout << tval << std::endl; }
Надеюсь я вам помог
1
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 10:04  [ТС] #8
Да, про это. Спасибо большое, очень помогли)
0
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
31.10.2013, 10:30 #9
Да, не полностью в вопрос вник. Решил, что нужна альтернатива приведенному примеру без использования шаблонов. Сбила формулировка "нешаблонный класс", поскольку класс, содержащий шаблонный член класса, уже является шаблонным.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
31.10.2013, 10:36 #10
mytilus, Неа. Просто коротенькая цитатка из стандарта, которая опровергает это заявление.
A template can be declared within a class or class template; such a template is called a member template.
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,292
Завершенные тесты: 1
31.10.2013, 10:39 #11
Цитата Сообщение от mytilus Посмотреть сообщение
Сбила формулировка "нешаблонный класс", поскольку класс, содержащий шаблонный член класса, уже является шаблонным.
Откуда сведения, что класс, содержащий шаблонный член, - шаблонный сам? Это неверно:
A template can be declared within a class or class template; such a template is called a member template.
Upd ForEveR быстр, когда дело касается стандарта
0
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
31.10.2013, 11:34 #12
Ну, хотя бы первая строка этого стандарта:
A template defines a family of classes or functions.
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,292
Завершенные тесты: 1
31.10.2013, 12:43 #13
Цитата Сообщение от mytilus Посмотреть сообщение
Ну, хотя бы первая строка этого стандарта:
A template defines a family of classes or functions.
Она никак не подтверждает твои слова, так как тут ни одного упоминания о class template нету. Более того, если бы ты дочитал пункт до конца, то увидел бы фразу, выделенную мной жирным шрифтом.
The declaration in a template-declaration shall
— declare or define a function or a class, or
— define a member function, a member class or a static data member of a class template or of a class
nested within a class template, or
— define a member template of a class or class template.
0
mytilus
83 / 83 / 9
Регистрация: 04.10.2012
Сообщений: 335
31.10.2013, 23:33 #14
Выделенная фраза не противоречит суждению, что шаблон-член, объявленный в нешаблонном классе, переопределяет этот класс как шаблон.
0
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,292
Завершенные тесты: 1
01.11.2013, 00:35 #15
Цитата Сообщение от mytilus Посмотреть сообщение
Выделенная фраза не противоречит суждению, что шаблон-член, объявленный в нешаблонном классе, переопределяет этот класс как шаблон.
Это не суждение, а сплошные домыслы. В той фразе из стандарта ясно сказано, что шаблонная функция-член может существовать как в шаблонном классе, так и в нешаблонном. А вот пруфа про какое-то "переопределение" в стандарте я не встречал. Покажешь?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 00:35
Привет! Вот еще темы с ответами:

Вызов метода внутреннего класса методом внешнего класса - C++
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце...

Вызов динамического метода класса по указателю на объект класса - C++
Как это можно сделать? И хотелось бы как можно проще.

Обработка метода класса в зависимости от типа данного класса - C++
Имеется класс родителя A с методом Update(), этот класс имеет 2 дочерних класса B, C, каждый из них имеет свой метод обработки Update:...

Вызов метода класса без создания экземпляра класса. - C++
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов. Я это делаю с помощью new - delete. Мне...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.11.2013, 00:35
Ответ Создать тему
Опции темы

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