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

Friend declaration construction - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какой паттерн подойдет, чтобы избежать длинных ветвлений? http://www.cyberforum.ru/cpp/thread1780896.html
здравствуйте, есть код схематично такой: class CTest_base { public: CTest_base() : vec() {} virtual ~CTest_base() noexcept {} //something else protected: std::vector<int> vec;...
C++ Что такое фреймворк? Доброго времени суток. Объясните пожалуйста на счет фреймворков. Несколько минут погуглив я примерно понял что это такое, но все же остались сомнения. В универе нам сказали писать программы в QT. При... http://www.cyberforum.ru/cpp/thread1780854.html
C++ Скорость или размер. Динамика
Есть ряд вопросов.. 1) Что быстрее считает процессор (соответственно с разрядностью). К примеру динамически создаётся массив. Из этого массива надо вычислить к примеру c=a+b. Если c = m и a = m, то...
C++ Существует ли какие-нибудь мета редакторы(авто дописывание кода)?
Всем доброго времени суток! Я решил оптимизировать свою работу и придумал следующую идею на основе авто кода в C++ XE3. Если в среде написать switch и следать пробел, то программа сама допишет то,...
C++ Таблица символов для компилятора http://www.cyberforum.ru/cpp/thread1778725.html
Делаю простой компилятор и что-то зависла на вопросе о том, как хорошо реализовать таблицу символов. Реализовать в виде класса, где в качестве поля используется, скажем, вектор, в который добавляются...
C++ Хэш код для нормализованного вектора Мне нужно генерировать 64-разрядный хэш для трехмерных нормализованных векторов (double). Хэши должны быть равны если сгенерированы из одного или равных (поэлементно) векторов. У кого какие мысли?... подробнее

Показать сообщение отдельно
Nosey
1349 / 400 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
17.07.2016, 19:50
Цитата Сообщение от hoggy Посмотреть сообщение
напишите код,
который иллюстрирует все три правила.
Цитата Сообщение от hoggy Посмотреть сообщение
который иллюстрирует все три правила.
You are welcome :
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
#include <iostream>
 
class A;
 
template<typename T> void f1(A& a, T v);
template<typename T> void f1_1(A& a, T v);
template<typename T> void f3(A& a, T v);
void f2(A& a, int v);
 
class A
{
    int a;
    friend void ::f1<>(A&, int); // первое правило - привязывает к шаблонам
    friend void f1_1<>(A&, int); // также первое правило - привязывает к шаблонам, т.е квалификация не обязательна.
    friend void ::f2(A&, int); // второе правило - привязывает к обычным функциям
    friend void ::f3(A&, int); // третье правило - если (2)-ой вариант не сработал - обязаны попытаться привязать к шаблону. Юзая классическую дедукцию аргументов шаблона.
    friend void f4(A&, int); // четвертое правило - компилятор сам объявит эту функцию.
};
 
template<>
void f1<int>(A& a, int v)
{
    a.a = v;
    std::cout << a.a;
}
 
template<>
void f1_1<int>(A& a, int v)
{
    a.a = v;
    std::cout << a.a;
}
 
void f2(A& a, int v)
{
    a.a = v;
    std::cout << a.a;
}
 
template<>
void f3<int>(A& a, int v)
{
    a.a = v;
    std::cout << a.a;
}
 
void f4(A& a, int v)
{
    a.a = v;
    std::cout << a.a;
}
 
int main()
{
    A a;
    f1(a,10);
    f1_1(a,11);
    f2(a,12);
    f3(a,13);
    f4(a,14);
}
В студии верхний код соберется. В остальных компиляторах мне лень дотошно разбираться и описывать, но вот пока баловался понял, что в gcc - багов по теме дружественности больше, чем просто "не привязывает дружественность"
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.