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

Сравнение объектов template - C++

Восстановить пароль Регистрация
 
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
20.03.2012, 18:53     Сравнение объектов template #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template<unsigned m>
class Residue
{
private:
    unsigned _n;
public:
    Residue(unsigned n):_n(n){};
    ~Residue(){};
     template<unsigned m>
     Residue<m>& operator=(const Residue<m>& a)
    {
        _n=a._n();
        return *this;
    }
...
}
 
int main()
{
Residue<5> a(6);
Residue<3> c(4);
}
Подскажите пожалуйста возможно ли определить оператор== для этих объектов? Как это сделать, если вообще возможно это.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2012, 18:53     Сравнение объектов template
Посмотрите здесь:

сравнение объектов класса C++
Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier C++
C++ MSVC и template template classes
C++ Сравнение объектов string
Сравнение объектов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
20.03.2012, 19:25     Сравнение объектов template #2
похоже что Residue<5> и Residue<3> это разные классы, поэтому так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
template<unsigned M>
class Residue
{
public:
    unsigned _n;
 
    Residue(unsigned n):_n(n){};
    template<unsigned N>
    bool operator==(const Residue<N>& a)
    {
        return _n == a._n;
    }
};
 
int main()
{
    Residue<5> a(6);
    Residue<3> c(6);
    std::cout << (a == c);
    return 0;
}
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
20.03.2012, 19:39  [ТС]     Сравнение объектов template #3
А проверить именно <3> и <5> можно или нет?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
20.03.2012, 19:43     Сравнение объектов template #4
Ты про это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template<unsigned M>
class Residue
{
public:
    static const unsigned value = M;
    unsigned _n;
 
    Residue(unsigned n):_n(n){};
    template<unsigned N>
    bool operator==(const Residue<N>& a)
    {
        return value == a.value;
    }
};
 
int main()
{
    Residue<5> a(6);
    Residue<3> c(6);
    std::cout << (c == a);
    return 0;
}
Код
0
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
20.03.2012, 20:08     Сравнение объектов template #5
или так
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
#include <iostream>
#include <typeinfo>
 
template<unsigned M>
class Residue
{
public:
    unsigned _n;
    Residue(unsigned n) :_n(n){};
    template<unsigned N>
    bool operator==(const Residue<N>& a) const
    {
        return (typeid(*this) == typeid(a));
        //return M == N;
    }
};
 
int main()
{
    Residue<8> a(6);
    Residue<6> c(2);
    std::cout << (a == c);
    return 0;
}
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
20.03.2012, 20:13  [ТС]     Сравнение объектов template #6
Да, оно, спасибо) Еще вопрос. Операции над этими разными объектами не выйдет реализовать? Это логично, потому что разные объекты, но хотелось бы сказать как то в консоли что этого делать нельзя, но наверное не выйдет все таки, потому что ошибки дает еще до компиляции. Жаль

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
static const unsigned value = M;
    unsigned _n;
 
    Residue(unsigned n):_n(n){};
    template<unsigned N>
    bool operator==(const Residue<N>& a)
    {
        return value == a.value;
    }
А здесь нам же не обязательно писать template<unsigned N>, можно же так само template<unsigned М> как и перед классом, при определении объекта static const.. будет постоянно один
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
20.03.2012, 20:37     Сравнение объектов template #7
А здесь нам же не обязательно писать template<unsigned N>
обязательно, т.к. обьекты разных классов
Операции над этими разными объектами не выйдет реализовать?
оператор+ удалось
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
#include <iostream>
#include <typeinfo>
 
template<unsigned M>
class Residue
{
public:
    unsigned _n;
    Residue(unsigned n) :_n(n){};
    template<unsigned N>
    Residue<M + N> operator+(const Residue<N>& a) const
    {
        return Residue<M + N>(_n + a._n);
    }
};
 
int main()
{
    Residue<8> a(6);
    Residue<6> c(2);
    auto d = a + c;
    std::cout << d._n << '\n' <<
     std::boolalpha << (typeid(d) == typeid(Residue<8 + 6>));
    return 0;
}
Vidok
 Аватар для Vidok
36 / 36 / 2
Регистрация: 03.09.2011
Сообщений: 279
20.03.2012, 21:06  [ТС]     Сравнение объектов template #8
А вне класса можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2012, 21:19     Сравнение объектов template
Еще ссылки по теме:

Ошибка компиляции: template-id does not match any template declaration C++
C++ Сравнение 2 объектов, через адрес таблицы виртуальных методов
'MyQueue' : use of class template requires template argument list C++

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

Или воспользуйтесь поиском по форуму:
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
20.03.2012, 21:19     Сравнение объектов template #9
будет тот же самый результат, что и у igorrr37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template<unsigned M>
class Residue
{
public:
    unsigned _n;
    Residue(unsigned n) :_n(n){};
};
 
template <unsigned M, unsigned N >
Residue<M+N> operator + (Residue<M> a, Residue<N> b) {
    return Residue<M + N>(a._n + b._n);
}
 
int main()
{
    Residue<8> a(6);
    Residue<6> c(2);
    auto d = a + c;
    std::cout << d._n << '\n' <<
     std::boolalpha << (typeid(d) == typeid(Residue<8 + 6>));
    return 0;
}
Yandex
Объявления
20.03.2012, 21:19     Сравнение объектов template
Ответ Создать тему
Опции темы

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