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

Friend declaration construction - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с кодировками http://www.cyberforum.ru/cpp/thread1781380.html
Всем привет. Есть следующая проблема: есть программа, которая загружает html код страницы с сайта. Затем из этого html кода необходимо выдернуть все ссылки. Проблема заключается в том, что html документ может быть сохранен в любой кодировке. Поэтому, т.к. для себя я выбрал использовать utf-8, мне необходимо эти символы преобразовывать в utf-8. 1) Какие есть стандартные средства для...
C++ Развейте мои сомнения: упростится ли программирование при переходе от C к C++? Когда-то я уже начинал изучать C++, даже писал не большие программки на C++. Потом забросил и не кодил на C++ лет 8. Почти все забыл. Но тут возникла одна идея, которую нужно реализовать в виде программы и я решил тут «вспомнить молодость» и начать, что называется, «с нуля». Взял в руки книжку В.В. Подбельского «язык C++» 2005 года выпуска (знаю, что есть Страуструп, Липман и др. книжки посвежее... http://www.cyberforum.ru/cpp/thread1781376.html
C++ Сколько весит объект пустого класса
Господа, Создается пустой класс, скажем: class A { }; Потом объявляется переменная: A value; Вопрос: сколько value будет занимать места в куче (если она вообще там будет)?
Решение СЛАУ методом вращений (Якоби) - Рабочий метод C++
Есть этот код он рабочий, но надо коментарии повсюду, а я языка совсем не знаю, помогите кто может, зарание спасибо #include "stdafx.h" #include "stdio.h" #include <iostream> #include "math.h" const double PI = 3.1415926536; //метод поворотів якобі bool isSimmetrial( double **coefficients, int numberOfEquation ) {
C++ Вывести в консоль значение типа BYTE http://www.cyberforum.ru/cpp/thread1781333.html
COLORREF pix=GetPixel(hdc,0,0); BYTE b=GetGValue(pix); std::cout<<b<<std::endl; В консоль выводится какие-то знаки, а мне нужно получать значения от 0-255 как это сделать?
C++ Класс стек, наследованный от связного списка Как я понял из текста, что для методов isEmpty и print класса List нужен какой-то аргумент. Объясните пожалуйста, что такое -fpermissive. Ошибки: In member function 'int Stack<STACKTYPE>::isStackEmpty() const: 14 строка there are no arguments to 'isEmpty' that depend on a template parameter, so a declaration of 'isEmpty' must be available (if you use '-fpermissive', G++ will accept your... подробнее

Показать сообщение отдельно
Nosey
1326 / 394 / 107
Регистрация: 22.10.2014
Сообщений: 851
Завершенные тесты: 2
16.07.2016, 17:45     Friend declaration construction
Цитата Сообщение от hoggy Посмотреть сообщение
я так понял, что это и есть то самое, про что пишет Джоссатис:
если имя функции-друга полное,
никаких не шаблонных версий не было найдено,
то компилятор должен попытаться вывести специализацию шаблона.
А слона-то я и не приметил. Да, пишет о практической работе.

Но проблема что в стандарте, насколько я могу судить, это не указано, и даже напротив, указано обратное :
Цитата Сообщение от 14.8.2.6 Deducing template arguments from a function declaration
1 In a declaration whose declarator-id refers to a specialization of a function template, template argument
deduction is performed to identify the specialization to which the declaration refers. Specifically, this is done
for explicit instantiations (14.7.2), explicit specializations (14.7.3), and certain friend declarations (14.5.4)
и так навсякий случай добавлю следующее :
Цитата Сообщение от 14.7.3 Explicit specialization
3 ... Such a
declaration may also be a definition. If the declaration is not a definition, the specialization may be defined
later

А также я наврал насчет "всех копиляторов".
В студии следующий код собрался:
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>
 
template <typename T>
void multiply(T);
 
class Pride
{
    int p;
public:
    friend void ::multiply(int);
};
 
template <>
void multiply(int)
{
    Pride pr;
    pr.p = 10; /* member p is private */
    std::cout << pr.p;
}
 
int main()
{
    multiply(10);
}
Так что всё-таки выходит что это баг gcc и шланга. Годы идут, а ничего не меняется

Добавлено через 5 минут
avgoor, Ваш приведенный код попадает под первое правило, ибо
Цитата Сообщение от avgoor Посмотреть сообщение
template<class T> friend void Foo::foo(A& a, T t); // для этого
это без сомнений qualified template-id.
 
Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru