Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
notAll
440 / 162 / 60
Регистрация: 27.05.2016
Сообщений: 439
Завершенные тесты: 2
#1

Перегрузка operator T& - C++

04.09.2016, 12:52. Просмотров 219. Ответов 4
Метки нет (Все метки)

Почему не срабатывает перегруженный оператор T& ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
struct Test
{
    T value_;
    operator T&() { return value_; }
};
 
int main()
{
    Test<int> t;
    t = 42; // no match for 'operator=' (operand types are 'Test<int>' and 'int')
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2016, 12:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка operator T& (C++):

перегрузка & operator+=
Изучая C++, наткнулся в одном из упражнений на такое выражение: Port &amp;...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp;...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size;...

Friend ostream& operator<<(ostream& stream, CArr& obj);
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Добрый день. Как осуществляется выделения памяти под перегруженный оператор...

4
HelicopterK52
780 / 210 / 32
Регистрация: 27.07.2016
Сообщений: 474
Завершенные тесты: 1
04.09.2016, 13:00 #2
C++
1
static_cast<int&>(t) = 42;
1
notAll
440 / 162 / 60
Регистрация: 27.05.2016
Сообщений: 439
Завершенные тесты: 2
04.09.2016, 14:06  [ТС] #3
А без явного каста этого никак не сделать?

Добавлено через 41 минуту
Ладно, тогда сделаю стандартным способом:
C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
struct Test
{
    T value_;
    Test& operator = (const T& val)
    {
        value_ = val;
        return *this;
    }
}
Добавлено через 15 минут
Тогда, объясните мне, почему в данном случае не срабатывает operator T& для string:
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
template <typename T>
struct Test
{
    T value_;
    operator T&() { return value_; }
 
    Test& operator = (const T& val)
    {
        value_ = val;
        return *this;
    }
};
 
template <typename T>
Test<T>& get(Test<T>& obj)
{
    return obj;
}
 
int main()
{
    Test<int> ti;
    ti = 42;
    std::cout << get(ti) << "\n"; // Ok
 
    Test<std::string> ts;
    ts = "Hello";
    std::cout << get(ts) << "\n"; // Error
}
Добавлено через 4 минуты
Что бы было понятно чего я добиваюсь - надо сделать класс с доступом к полю как в tuple:
C++
1
2
3
std::tuple<int, std::string> tup;
    get<1>(tup) = "Hello";
    std::cout << get<1>(tup) << "\n";
0
Nosey
1349 / 400 / 144
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
04.09.2016, 14:07 #4
Лучший ответ Сообщение было отмечено notAll как решение

Решение

Цитата Сообщение от notAll Посмотреть сообщение
Тогда, объясните мне, почему в данном случае не срабатывает operator T& для string:
Потому что его никто не вызвает )
C++
1
2
3
4
5
template <typename T>
T& get(Test<T>& obj)
{
    return obj;
}
1
notAll
440 / 162 / 60
Регистрация: 27.05.2016
Сообщений: 439
Завершенные тесты: 2
04.09.2016, 14:26  [ТС] #5
Тогда мой следующий вопрос перенаправляю в эту тему
0
04.09.2016, 14:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2016, 14:26
Привет! Вот еще темы с решениями:

Перегрузка operator[][][]
Здорова господа!!! Как перегрузить operator для класса или operator ??? ...

Перегрузка operator=
const Point&amp; operator= (const Point &amp;p) { if (this ==&amp;p) return...

Перегрузка operator+
Как сложить суму годовы продаж всех компаний? Можно использовать перегрузку...

Перегрузка operator=
Возможно ли перегрузить оператор= так, что бы можно было написать? val =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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