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

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. При изучении заметил, что большинство библиотек начинались с буквы "Q" : QString, QWidgets, QObject, QMainWindow .... Правильно ли я понимаю, что QT это и есть один из фреймворков, которые позволяют... http://www.cyberforum.ru/cpp/thread1780854.html
C++ Скорость или размер. Динамика
Есть ряд вопросов.. 1) Что быстрее считает процессор (соответственно с разрядностью). К примеру динамически создаётся массив. Из этого массива надо вычислить к примеру c=a+b. Если c = m и a = m, то есть ли разница в скорости обработки (подачи аргумента в функцию/арифметическую операцию?) если сравнивать b = m или b = m. 2) Какова скорость обработки указателей, есть ли какие то зависимости?...
C++ Существует ли какие-нибудь мета редакторы(авто дописывание кода)?
Всем доброго времени суток! Я решил оптимизировать свою работу и придумал следующую идею на основе авто кода в C++ XE3. Если в среде написать switch и следать пробел, то программа сама допишет то, что нужно программисту. Пример: я писал switch(Enum_Value), где enum Enum_Value{Value1,Value2,Value3} После того, как я нажимал пробел или enter, программа сама дописывала switch(Enum_Value){...
C++ Таблица символов для компилятора http://www.cyberforum.ru/cpp/thread1778725.html
Делаю простой компилятор и что-то зависла на вопросе о том, как хорошо реализовать таблицу символов. Реализовать в виде класса, где в качестве поля используется, скажем, вектор, в который добавляются символы. При этом, чтобы такая таблица была одна, и другие классы, представляющие структуру языка (Variable, Constant) могли к ней обращаться. Думала о реализации Одиночки, но не очень хорошо...
C++ Хэш код для нормализованного вектора Мне нужно генерировать 64-разрядный хэш для трехмерных нормализованных векторов (double). Хэши должны быть равны если сгенерированы из одного или равных (поэлементно) векторов. У кого какие мысли? Может есть стандартный алгоритм? Да и ещё - после генерации 64-разрядного хэш-кода я увязываю его с 64-разрядным "ключевым сидом" методом XOR и далее сливаю в 32-битное значение применяя XOR к... подробнее

Показать сообщение отдельно
Nosey
1346 / 397 / 107
Регистрация: 22.10.2014
Сообщений: 861
Завершенные тесты: 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.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru