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

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

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

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

31.10.2013, 09:49. Просмотров 1137. Ответов 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) {...}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 09:49     Шаблон метода класса
Посмотрите здесь:

C++ Вызов метода класса без создания экземпляра класса.
Оптимизация работы метода класса с объектами класса [C++] C++
Шаблон данных метода кдасса, наследование C++
C++ Вызов метода производного класса через обращение к методу базового класса
Вызов метода базового класса из класса-потомка C++
C++ Передача метода класса в качестве параметра для метода другого класса
Вызов метода внутреннего класса методом внешнего класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
31.10.2013, 09:53     Шаблон метода класса #2
Нет, не можете. В вашем случае, надо перегружать методы.
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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; }      
};
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 09:55  [ТС]     Шаблон метода класса #4
Цитата Сообщение от mytilus Посмотреть сообщение
Нет, не можете. В вашем случае, надо перегружать методы.
Жаль. Спасибо
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
31.10.2013, 09:57     Шаблон метода класса #5
Нет, не можете.
Не мелите ерунды.
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 10:00  [ТС]     Шаблон метода класса #6
То есть необходимо писать определение функции сразу же, в классе?
Нельзя просто объявить функцию в классе, а определить её вне класса?
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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; }
Надеюсь я вам помог
laucher
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 20
31.10.2013, 10:04  [ТС]     Шаблон метода класса #8
Да, про это. Спасибо большое, очень помогли)
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
31.10.2013, 10:30     Шаблон метода класса #9
Да, не полностью в вопрос вник. Решил, что нужна альтернатива приведенному примеру без использования шаблонов. Сбила формулировка "нешаблонный класс", поскольку класс, содержащий шаблонный член класса, уже является шаблонным.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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.
ct0r
Игогошка!
1762 / 664 / 42
Регистрация: 19.08.2012
Сообщений: 1,261
Завершенные тесты: 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 быстр, когда дело касается стандарта
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
31.10.2013, 11:34     Шаблон метода класса #12
Ну, хотя бы первая строка этого стандарта:
A template defines a family of classes or functions.
ct0r
Игогошка!
1762 / 664 / 42
Регистрация: 19.08.2012
Сообщений: 1,261
Завершенные тесты: 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.
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
31.10.2013, 23:33     Шаблон метода класса #14
Выделенная фраза не противоречит суждению, что шаблон-член, объявленный в нешаблонном классе, переопределяет этот класс как шаблон.
ct0r
Игогошка!
1762 / 664 / 42
Регистрация: 19.08.2012
Сообщений: 1,261
Завершенные тесты: 1
01.11.2013, 00:35     Шаблон метода класса #15
Цитата Сообщение от mytilus Посмотреть сообщение
Выделенная фраза не противоречит суждению, что шаблон-член, объявленный в нешаблонном классе, переопределяет этот класс как шаблон.
Это не суждение, а сплошные домыслы. В той фразе из стандарта ясно сказано, что шаблонная функция-член может существовать как в шаблонном классе, так и в нешаблонном. А вот пруфа про какое-то "переопределение" в стандарте я не встречал. Покажешь?
mytilus
82 / 82 / 8
Регистрация: 04.10.2012
Сообщений: 329
01.11.2013, 01:47     Шаблон метода класса #16
Там написано, что она может быть определена, а не существовать. А приведенная мной цитата указывает, что шаблоны - это семейство классов или функций, а не членов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2013, 02:48     Шаблон метода класса
Еще ссылки по теме:

Шаблон класса, параметром которого должны являться наследники определённого класса C++
C++ Не удается обратиться к свойству класса из метода класса
C++ Шаблон метода в классе
Обработка метода класса в зависимости от типа данного класса C++
C++ Ошибка при вызове метода класса в методе другого класса

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

Или воспользуйтесь поиском по форуму:
ct0r
Игогошка!
1762 / 664 / 42
Регистрация: 19.08.2012
Сообщений: 1,261
Завершенные тесты: 1
01.11.2013, 02:48     Шаблон метода класса #17
Цитата Сообщение от mytilus Посмотреть сообщение
Там написано, что она может быть определена, а не существовать. А приведенная мной цитата указывает, что шаблоны - это семейство классов или функций, а не членов.
1) А в чем принципиальное отличие "определена" и "существовать"? Ну хорошо, пусть "В той фразе из стандарта ясно сказано, что шаблонная функция-член может существовать как в шаблонном классе, так и в нешаблонном".
2) Вот тут-то ты и ошибаешься, считая, что функция-член - это не функция. По стандарту:
Functions declared in the definition of a class, excluding those declared with a friend specifier (11.3), are called member functions of that class.
Поэтому все верно: шаблонная функция-член нешаблонного класса определяет семейство функций.
Yandex
Объявления
01.11.2013, 02:48     Шаблон метода класса
Ответ Создать тему
Опции темы

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