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

Можно ли в не шаблонном классе создать шаблонные методы? - C++

Восстановить пароль Регистрация
 
 
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 15:27     Можно ли в не шаблонном классе создать шаблонные методы? #1
Можно ли в не шаблонном классе создать шаблонные методы?

Пример:
Есть перегруженная функция например:
C++
1
void test(int x),test(float x), test(std::string x) { std::cout << x << std::endl; }
Допустим есть класс:
C++
1
2
3
4
5
6
class A
{
   public:
       A() {}
       void my_test(x) { test (x); }
};
в таком виде мне придется перегрузить метод my_test() - столько же раз сколько перегружена функция test - это не удобно
Если сделать так:
C++
1
2
3
4
5
6
class A
{
   public:
       A() {}
       template<class T>void my_test(T t) { test (t); }
};
так было бы удобней
Вопрос в том как это использовать?
Программа компилируется нормально, но при использовании:
C++
1
2
A a;
a.my_test(10);
Возникает ошибка:
Код
(.text.startup+0x67):-1: ошибка: undefined reference to `void A::my_test<int>(int)'
Помогите разобраться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2014, 15:27     Можно ли в не шаблонном классе создать шаблонные методы?
Посмотрите здесь:

C++ Параметры в шаблонном классе
C++ Ошибка в шаблонном классе
C++ typedef в шаблонном классе фыв
C++ Шаблонный конструктор в шаблонном классе
C++ Найти ошибки в шаблонном классе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
04.03.2014, 15:35     Можно ли в не шаблонном классе создать шаблонные методы? #2
Цитата Сообщение от Artemka101 Посмотреть сообщение
Помогите разобраться?
Ты наверное вынес реализацию метода в отдельный cpp?
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 15:39  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #3
Цитата Сообщение от DrOffset Посмотреть сообщение
Ты наверное вынес реализацию метода в отдельный cpp?
да реализация находится в отдельном файле
C++
1
2
3
4
template<class T>void A::my_test(T t) 
{ 
test (t); 
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.03.2014, 15:40     Можно ли в не шаблонном классе создать шаблонные методы? #4
кстати да у меня такая ошибка была, когда реализовывал шаблон в другом срр, но тут вроде как метод только

Добавлено через 29 секунд
Цитата Сообщение от Artemka101 Посмотреть сообщение
да реализация находится в отдельном файле
попробуй в main его определить
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 15:42  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #5
Цитата Сообщение от dzrkot Посмотреть сообщение
попробуй в main его определить
Не совсем понял???
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
04.03.2014, 15:55     Можно ли в не шаблонном классе создать шаблонные методы? #6
Artemka101, Вы прям одновременно одни и те же вопросы задаете
Читай пост, там все есть.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.03.2014, 15:56     Можно ли в не шаблонном классе создать шаблонные методы? #7
Цитата Сообщение от Artemka101 Посмотреть сообщение
Не совсем понял???
у меня был косяк - когда шаблон был в отдельном срр и не работал, а в main работал т.к. шаблонные классы не генерятся из других срр (по человечески тебе это может объяснить кто-то другой, не я) ), шаблон же это лишь указание компилятору как создавать тот или иной экземпляр функции/класса/метода

перенеси в main это, или вообще попробуй весь класс в майн поместить
C++
1
2
3
4
template<class T>void A::my_test(T t) 
{ 
test (t); 
}
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 16:08  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Читай пост, там все есть.
Но там обсуждается шаблонный класс, меня интересует только шаблонный метод, а не весь класс

Добавлено через 21 секунду
Цитата Сообщение от dzrkot Посмотреть сообщение
перенеси в main это, или вообще попробуй весь класс в майн поместить
это не вариант
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.03.2014, 16:09     Можно ли в не шаблонном классе создать шаблонные методы? #9
Цитата Сообщение от Artemka101 Посмотреть сообщение
это не вариант
попробуйте просто тобы посмотреть заработает или нет
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 16:17  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #10
Цитата Сообщение от dzrkot Посмотреть сообщение
попробуйте просто тобы посмотреть заработает или нет
работает но переносить классы в main все равно не вариант

Добавлено через 46 секунд
Блин похоже придется делать весь класс шаблонным
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.03.2014, 16:25     Можно ли в не шаблонном классе создать шаблонные методы? #11
ещё раз попытаюсь до вас донести, в другом срр шаблон работать не будет, только если вы опишите метод в .h или в main
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
04.03.2014, 16:32     Можно ли в не шаблонном классе создать шаблонные методы? #12
объявление и реализация для шаблонных классов(классов с шаблонными ф-циями) должны быть в одном файле
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
04.03.2014, 16:38     Можно ли в не шаблонном классе создать шаблонные методы? #13
Цитата Сообщение от Artemka101 Посмотреть сообщение
Но там обсуждается шаблонный класс, меня интересует только шаблонный метод, а не весь класс
Разницы нет. Просто переносить в cpp следует все методы, кроме шаблонного. А шаблонный оформить как советуется в той теме. Постарайся суть ухватить. Суть в раздельной компиляции в С++.

Добавлено через 58 секунд
aLarman, вообще не должны. Реализация должна быть доступна в точке инстанцирования. И только.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
04.03.2014, 16:39     Можно ли в не шаблонном классе создать шаблонные методы? #14
Цитата Сообщение от DrOffset Посмотреть сообщение
вообще не должны
а как еще?, в разных файлах не скомпилит ж
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 16:43  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #15
Цитата Сообщение от DrOffset Посмотреть сообщение
Постарайся суть ухватить. Суть в раздельной компиляции в С++
Да уже ухватил - спасибо!
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
04.03.2014, 16:44     Можно ли в не шаблонном классе создать шаблонные методы? #16
Цитата Сообщение от aLarman Посмотреть сообщение
а как еще?, в разных файлах не скомпилит ж
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
//a.h
template <class T>
class A
{
public:
    void foo();
};
 
//a.cpp
#include "a.h"
 
template <class T>
void A<T>::foo()
{
}
 
template class A<int>; // здесь точка инстанцирования. (явное инстацирование)
 
//b.cpp
#include "a.h"
 
int main()
{
    A<int> a;
    a.foo(); //файлы разные, но все работает
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2014, 16:58     Можно ли в не шаблонном классе создать шаблонные методы? #17
Цитата Сообщение от DrOffset Посмотреть сообщение
template class A<int>; // здесь точка инстанцирования. (явное инстацирование)
Есть от этого какая-то практическая польза? Типов может быть много разных.
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
04.03.2014, 17:00     Можно ли в не шаблонном классе создать шаблонные методы? #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Есть от этого какая-то практическая польза? Типов может быть много разных.
Это отдельный разговор. Просто у людей заблуждение насчет разных файлов, когда дело совсем не в файлах, а в наличии полного определения шаблона в точке инстанцирования (что и показывает этот пример).
Artemka101
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
04.03.2014, 17:17  [ТС]     Можно ли в не шаблонном классе создать шаблонные методы? #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Есть от этого какая-то практическая польза? Типов может быть много разных.
смысл в явном перечислении типов
C++
1
2
3
template class A<int>;
template class A<float>;
template class A<std::string>;
что конечно же не всегда удобно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 17:23     Можно ли в не шаблонном классе создать шаблонные методы?
Еще ссылки по теме:

Работа с матрицей в шаблонном классе C++
C++ Статическая функция в шаблонном классе
C++ Конструктор копирования в шаблонном классе

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

Или воспользуйтесь поиском по форуму:
DrOffset
04.03.2014, 17:23     Можно ли в не шаблонном классе создать шаблонные методы?
  #20

Не по теме:

Artemka101, вообще-то про смысл не я спрашивал.

Yandex
Объявления
04.03.2014, 17:23     Можно ли в не шаблонном классе создать шаблонные методы?
Ответ Создать тему
Опции темы

Текущее время: 00:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru