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

Перегрузка оператора шаблонного класса в зависимости от типа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Циклы с накоплением (Сколько километров спортсмен пробежит за семь дней?) http://www.cyberforum.ru/cpp-beginners/thread721449.html
Начав тренировку, спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от нормы предыдущего дня. Сколько километров спортсмен пробежит за семь дней?
C++ Вычислить значение квадратов четных чисел натурального ряда от K до M. Вычислить значение квадратов четных чисел натурального ряда от K до M. http://www.cyberforum.ru/cpp-beginners/thread721446.html
C++ Cвести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований свести матрицу к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины. Кто может сделайте пожалуйста.
C++ Динамический список
Здравствуйте. Помогите реализовать динамический список с такими функциями: Динамический список Конструкторы: по умолчанию, с параметрами и копирования. Деструктор. функции: вставка элемента из головы (хвоста) в заданном месте; вывода списка на экран; поиск элемента списка; получения головы (хвоста) списка;
C++ Разработать программу, выполняющую простейшие арифметические операции. http://www.cyberforum.ru/cpp-beginners/thread721409.html
Разработать вспомогательную программу) выполняющую простейшие арифметические операции. Исходные данные вводятся как параметры переменных окружения
C++ Нужно массив находящийся в файле разбить на столбцы и вывести среднее Всем :senor: Дан массив в файле.txt такого вида: "2012/8/10 12:55:14.21",0,0,25.07,43.7,1.97,1006.02,1050.96,60.29,-309.29,484.4,-0.11,,25.81,11.86,,53,2.95 "2012/8/10 12:55:14.72",0,0,25.07,43.79,1.98,1006.01,1050.94,60.4,-309.2,484.65,0.01,,25.81,11.9,,54,2.95 "2012/8/10 12:55:15.22",0,0,25.04,44,1.98,1006.01,1050.94,60.4,-309.2,483.96,-0.1,,25.8,11.94,,53,2.95 "2012/8/10... подробнее

Показать сообщение отдельно
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.12.2012, 22:34  [ТС]     Перегрузка оператора шаблонного класса в зависимости от типа
Замучился уже с этими шаблонами. Нужен совет. Сделал еще серию перегруженных операторов + и += и застрял на выносе их за пределы класса. Вернее, проблема возникает только с дружественной функцией, если определять ее в классе, то все в порядке. Кто подскажет как ее определить за пределами класса?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
 
template<typename T>
class foo
{
    T m_somevalue;
public:
    foo() : m_somevalue(10) {}
    T get() const {return m_somevalue;}
    void show() const {std::cout<<m_somevalue<<std::endl;}
 
    template<typename U>
    foo & operator +=(foo<U> const& rhs);                          // foo += foo
 
    template<typename U>
    foo & operator +=(U const& rhs);                               // foo += !foo
 
    template<typename U>
    foo operator +(foo<U> const& rhs);                             // foo + foo}
 
    template<typename U>
    foo operator +(U const& rhs);                                  // foo + !foo
 
    template<typename U>     //ЕСЛИ ОПРЕДЕЛИТЬ СДЕСЬ, ТО ВСЕ ВПОРЯДКЕ
    friend foo operator +(U const& lhs, foo const& rhs);            // !foo + foo
};
 
template<typename T> template<typename U>
foo<T>& foo<T>::operator +=(foo<U> const& rhs) {   // foo += foo
    m_somevalue += rhs.get();
    return *this;
}
 
template<typename T> template<typename U>
foo<T>& foo<T>::operator +=(U const& rhs) {        // foo += !foo
    m_somevalue += rhs;
    return *this;
}
 
 
template<typename T> template<typename U>
foo<T> foo<T>::operator +(foo<U> const& rhs) {   // foo + foo
    foo<T> temp(*this);
    temp += rhs;
    return temp;
}
 
template<typename T> template<typename U>
foo<T> foo<T>::operator +(U const& rhs) {        // foo + !foo
    foo<T> temp(*this);
    temp.m_somevalue += rhs;
    return temp;
}
 
template<typename T> template<typename U>   //ВОТ ТУТ  ПРОБЛЕМА
foo<T> operator +(U const& lhs, foo<T> const& rhs) {        // !foo + foo
    foo<T> temp(rhs);
    temp.m_somevalue += lhs;
    return temp;
}
 
int main()
{
    foo<int> a, b;
    foo<double> d;
    double doub = 10.2;
    a.show();       //10
    b.show();       //10
    d.show();       //10
    (a+=b).show();  //OK
    (a+=d).show();  //OK
    (a+=5).show();  //OK
    (a+b).show();   //OK
    (a+d).show();   //OK
    (a+10).show();  //OK
    //(10.2+d+15).show();
    //(doub+d+doub+a).show();
 
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru