Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 13
1

Void как подстановочный тип шаблона

23.09.2017, 01:30. Показов 1510. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть шаблон функции такого типа:

C++
1
2
3
4
5
template <typename myClass, typename in_t, typename out_t, typename smth_t>
void foo(myClass myObj, out_t& (myClass::*fooPtr)(in_t), smth_t smth_arg)
{
//код
}
Он работает корректно, пока fooPtr не является указателем на метод класса myClass, не берущий входных аргументов. В последнем случае выдает ошибку "No matching function for call to...". Значит ли это, что в таком случае компилятор "не может" вывести тип in_t как void?

Как можно решить проблему без написания еще одного шаблона специально "для указателей на методы без аргументов"?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2017, 01:30
Ответы с готовыми решениями:

Как узнать тип, переданный через указатель на void?
есть функция, принимает LPVOID, нужно узнать как тип переменной был передан, и сколько занимает в...

Тип void как возвращаемое значение функции: что он такое, зачем он нужен, где, когда и как его использовать?
Объясните пожалуйста про Void для оооочень далекого человека. Читаю книгу Шилдта, в принципе всё...

Свой тип как параметр шаблона
Есть вопрос по коду: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;vector&gt; using namespace...

Как узнать тип данных шаблона функции?
Я старался делать так: #include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt;...

2
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
23.09.2017, 01:38 2
на счет первого вопроса - не знаю. по поводу второго с вариадиками надо похимичить только вот как быть с неизестным количеством smth_t и что это - я не знаю. если оно одно - то ок. перед вариадиком можно поставить. если нет - то над извращаться и желательно перед этим до конца ваши цели узнать. что в итоге вы хотите замутить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <typename myClass, typename out_t, typename... in_t>
void foo(myClass myObj, out_t (myClass::*fooPtr)(in_t...))
{
}
 
class Bar
{
public:
    void bar1() {}
    void bar2(int) {}
};
 
int main()
{
    Bar b;
    foo(b, &Bar::bar1);
    foo(b, &Bar::bar2);
}
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
23.09.2017, 19:07 3
Solevar, можно еще вот так на эту задачу зайти:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename myClass, typename func_t, typename smth_t>
void foo(myClass myObj, func_t (myClass::* fooPtr), smth_t smth_arg)
{
}
 
struct A
{
    void foo1() {}
    void foo2(int) {}
};
 
int main()
{
    A a;
    foo(a, &A::foo1, 1);
    foo(a, &A::foo2, 1);
}
Цитата Сообщение от Solevar Посмотреть сообщение
Значит ли это, что в таком случае компилятор "не может" вывести тип in_t как void?
Да.
1
23.09.2017, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2017, 19:07
Помогаю со студенческими работами здесь

Как ограничить тип данных шаблона класса?
Решил создать два класса: умный массив и его менеджер. Так как массив может хранить любые типы, то...

Параметр шаблона класса как собственный тип данных
Приветствую. Такой вопрос: как перегрузить операторы класса-шаблона, где в качестве аргумента...

Как указать тип аргумента шаблона для функции?
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;vector&gt; #include &lt;stdexcept&gt; #include...

Как сделать чтобы из шаблона всегда возвращался тип наибольшего размера
Есть задача сделать простой калькулятор. Операции решил определить через шаблоны. В шаблон в общем...


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

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