Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
notAll
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 2
1

Перегрузка operator T&

04.09.2016, 12:52. Просмотров 847. Ответов 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+=
Изучая 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...

4
HelicopterK52
784 / 214 / 32
Регистрация: 27.07.2016
Сообщений: 474
Завершенные тесты: 1
04.09.2016, 13:00 2
C++
1
static_cast<int&>(t) = 42;
1
notAll
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 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
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 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
456 / 175 / 64
Регистрация: 27.05.2016
Сообщений: 461
Завершенные тесты: 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

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

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

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


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

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

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