techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
1

Дружественная шаблонная функция шаблонного класса

29.05.2017, 11:54. Показов 1955. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не компилируется. Подскажите правильный синтаксис.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T> class A;
template<typename T, typename ... Args> void func(A<T> obj, Args ... args);
 
template<typename T>
class A {
    template<typename ... Args>
    friend void func<T, Args...>(A<T> obj, Args ... args);
};
 
template<typename T, typename ... Args> void func(A<T> obj, Args ... args) {}
 
int main() {}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2017, 11:54
Ответы с готовыми решениями:

Дружественная функция класса
Проблема в том что дружественная функция класа механик в класе car (friend void update_status) не...

Шаблон класса и дружественная функция
Доброго времени суток. Столкнулся с непониманием одного процесса. Задача звучит следующим образом:...

Дружественная функция и приватные члены класса
Здравствуйте, уважаемые форумчане! Подскажите, пожалуйста, можно ли как-то в коде ниже сделать...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

5
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
29.05.2017, 12:08 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T> class A;
template<typename T, typename ... Args> void func(A<T> obj, Args ... args);
 
template<typename T>
class A
{
    template<typename T1, typename ... Args>
    friend void func(A<T1> obj, Args ... args);
};
 
template<typename T, typename ... Args> void func(A<T> obj, Args ... args)
{
}
 
int main()
{
}
2
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
29.05.2017, 12:11  [ТС] 3
А через специализацию никак?
Во так ведь можно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<typename T> class A;
template<typename T> void func(A<T> obj);
 
template<typename T>
class A
{
    friend void func<T>(A<T> obj);
};
 
template<typename T> void func(A<T> obj) {}
 
int main() {
}
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
29.05.2017, 12:37 4
Цитата Сообщение от Mirmik Посмотреть сообщение
А через специализацию никак?
Для функций частичная специализация не разрешается.

Добавлено через 41 секунду
Цитата Сообщение от Mirmik Посмотреть сообщение
Во так ведь можно:
Это полная специализация. В исходном посте - частичная.
1
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
29.05.2017, 12:51  [ТС] 5
А почему она частичная?
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
29.05.2017, 13:03 6
Цитата Сообщение от Mirmik Посмотреть сообщение
А почему она частичная?
Ну как же:
Вот оригинальный шаблон:
Цитата Сообщение от Mirmik Посмотреть сообщение
C++
1
template<typename T, typename ... Args> void func(A<T> obj, Args ... args);
Вот твое friend-объявление:
Цитата Сообщение от Mirmik Посмотреть сообщение
C++
1
template<typename ... Args> friend void func<T, Args...>(A<T> obj, Args ... args);
Первый параметр шаблона специализирован типом T (из объемлющего шаблонного класса), остальные параметры функции остались шаблонными - это частичная специализация функции.

Добавлено через 3 минуты
Ну если понятнее будет, без дополнительных шаблонов и friend:
C++
1
2
3
4
5
template<typename T, typename ... Args> 
void func(A<T> obj, Args ... args);
 
template<typename ... Args> 
void func<int, Args...>(A<int> obj, Args ... args); // partial specialization
По смыслу равносильно тому, что было выше.
1
29.05.2017, 13:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2017, 13:03
Помогаю со студенческими работами здесь

Дружественная функция-оператор, доступ к закрытым полям класса
У меня есть класс MyClass, вот код: class MyClass { int x, y; public: MyClass(); friend...

Преобразование типа аргумента в тип класса и дружественная функция
Добрый день. Есть код: class Cls { private: double x; public: Cls(); Cls(double);

Почему дружественная функция не может обратиться к protected полю класса?
Не могу понять, почему функция не может обратиться к protected полю класса: class Ships {...

Дружественная функция не может получить доступ к приватным данным класса
Доброго времени суток уважаемые форумчане), пытаюсь реализовать дружественную функцию которая берет...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru