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

оператор-друг для нешаблонного класса, вложенного в шаблонный - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ [Теория] Преобразование Struct * <=> Type * http://www.cyberforum.ru/cpp-beginners/thread799594.html
Здравствуйте, Господа и Дамы. Немного теории, коротко и без зевоты. Итак, есть структура с однотипными переменными. struct coordinat3f{ float x, y, z; }; coordinat3f coord; и есть указатель...
C++ нейронные сети (адаптивные сети) нужен исходник 3д или 2д адаптивной сетки для небольшого использования в своей работе (растягивалась что бы на какуюнить фигуру на плоскости или в пространстве) а так же желательно рекомендации... http://www.cyberforum.ru/cpp-beginners/thread799581.html
Объясните, как создать класс C++
Описать класс, включающий заданные поля и функции. Разработать программу, которая создает массив объектов (размерность массива n вводится с клавиатуры) и выполняет требуемые действия. Класс -...
Построить покрытие булевой матрицы C++
помогите построить покрытие булевой матрицы на си++
C++ Ошибка работы деструктора http://www.cyberforum.ru/cpp-beginners/thread799546.html
Здравствуйте. Недавно начала программировать на C++, поэтому возможно жителям данного форума мой вопрос покажется сильно нубским. Тем не менее. Имею класс class MyClass { private: int...
C++ Создание Службы Windows Добрый день, с С++ не знаком вообще, стоит задача написать несколько служб на нем, до этого писал на С#, ну вынужден от него отказаться, вообще как их писать в С++? если в С# был мастер создания, то... подробнее

Показать сообщение отдельно
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.03.2013, 20:12
вот может немного модифицированный предыдущий вариант устроит:
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
#include <iostream>
 
template <class T>
class A
{
public:
    class B
    {
    public:
        friend void plus(int, B);
        friend void operator + (int i, B b) { plus<T>(i, b); }
    };
};
 
template <class T>
void plus(int, typename A<T>::B)
{
    std::cout << "HERE" << std::endl;
}
 
int main()
{
    A<int>::B a;
    10 + a;
    return 0;
}
или даже так:
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
#include <iostream>
 
template <class T>
class A
{
public:
    class B
    {
    public:
        template <class Y>
        friend void operator + (int, typename A<Y>::B);
 
        friend void operator + (int i, B b) { operator + <T>(i, b); }
    };
};
 
template <class T>
void operator + (int, typename A<T>::B)
{
    std::cout << "HERE" << std::endl;
}
 
int main()
{
    A<int>::B a;
    10 + a;
    return 0;
}
Добавлено через 8 минут
и еще забавная штука у VS2008.
если закоментировать строки 18-22, то код компилится и линкуется, только вот функция на строке 14 вызывается саму себя рекурсивно. похоже на баг студийный.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru