22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
1

Templates and pointers to functions

27.02.2011, 14:18. Показов 1380. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в общем пишу одну процедурку для работы с текстовыми файлами, которая сама должна в вызывать функцию, переданную ей с определенными параметрами

судя по всем мануалам объявление функции должно выглядеть так:

C++
1
2
3
template <class T, class TString>
DecoderResult variableDC ( FILE *file, T* obj, 
        void(*proc)( sting, SSCValuesList<TString>* , T*) )
но g++ на это дело ругается:
DS.cpp:29: error: expected ‘,’ or ‘...’ before ‘(’ token

объявляю и описываю функцию воттак:
C++
1
2
3
4
5
6
7
8
template <class T, class TString>
DecoderResult variableDC ( FILE *file, T* obj, 
        void(*proc))
{
//........
proc(variable,values,obj);
//........
}
g++ перестает ругаться, что, по-моему, странно, ибо сомнительной должна быть 6я строчка.

в итоге в обих случаях g++ ругается на вызов самой функции:

C++
1
2
3
4
5
6
7
8
void testing(string variable, SSCValuesList<string>* values, int* a)
{
//......
}
//....
int* a;
variableDC<int*,string>(f,a,&testing);  
//....
вот таким образом:
DS.cpp:141: error: no matching function for call to ‘variableDC(FILE*&, int*&, void (*)(std::string, SSCValuesList<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*, int*))’


в чем проблема? заранее спасибо))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2011, 14:18
Ответы с готовыми решениями:

Passing member functions into templates
Привет. Вот так передаю member-function в шаблон: #include &lt;iostream&gt; #include &lt;typeinfo&gt; ...

Qt smart pointers vs std smart pointers
В каких случаях лучше использовать Q*Pointer, а в каких std::*_ptr, или с наследниками QObject...

Pointers
Здравствуйте, не могу понять принцип указателей, можете пожалуйста объяснить почему в этом коде ...

C++: pointers, clases
Помогите, пожалуйста написать код для задачки Создать программу на языке С++, используя...

5
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.02.2011, 18:58 2
Странно, что ругается на первый вариант вариант объявления, он правильный. Второй вариант, очевидно, неверный, вы не добиваетесь того, чего хотите, proc не будет являться указателем на функцию.
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.02.2011, 19:10 3
-MefistofeL-, Если gcc 4.5+ можно попробовать использовать std::function<T>.
1
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
27.02.2011, 21:52  [ТС] 4
silent_1991, судя по всему надо искать ошибку...
ибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
template <class T>
void hwcaller( T* a,void (*hw)(int,T*))
{
    hw(1,a);
}
 
void hw(int b,int* a)
{
    cout<<endl<<"Hello world"<<endl<<*a<<endl<<b<<endl;
}
 
int main()
{
    int* a;
    a=new int(2);
    hwcaller<int>(a,&hw);
    return 0;
}
работает как надо

ForEveR, спс, но хотелось бы все-таки реализовать это на низком уровне.

Добавлено через 1 минуту
ЗЫ одну нашел - в вызове функции вместо <int*,...> нужно <int,...> но не в этом вся соль(

Добавлено через 2 часа 9 минут
Все нашел! вместо string sting написал))) печально...
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.02.2011, 22:17 5
Вот по этой причине рекомендуется выкладывать код полностью. А то вдруг это ваш собственный класс sting. Я ещё обратил внимание на схожесть со string, но потом как раз про самописный класс подумал.
0
22 / 20 / 5
Регистрация: 11.02.2009
Сообщений: 383
27.02.2011, 22:42  [ТС] 6
ну... просто большинство народу ленится полностью код читать и забивают с ответом (по себе знаю), поэтому стараюсь кидать только частями, чтобы кто-нибудь да ответил, всеравно спасибо))
0
27.02.2011, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2011, 22:42
Помогаю со студенческими работами здесь

указатели (Pointers)
Напишите функцию, которая будет проверять, если подстрока &quot;IPRE&quot; можно найти в данной линии. ...

Указатели (Pointers)
Здравствуйте. Решил углубленно изучить указатели. Скачал несколько книг, лекций, тестов именно по...

Pointers and dynamic arrays
Изучаю тему указатели и динамичесские массивы в классах. Хотелось бы быть уверенным в следующих...

Const, pointers, reference
const int&amp; const ref1; const int &amp;ref1; int const &amp;ref1; Во всех случаях это константная...


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

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

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