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

C++

Войти
Регистрация
Восстановить пароль
 
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
#1

Templates and pointers to functions - C++

27.02.2011, 14:18. Просмотров 829. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 14:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Templates and pointers to functions (C++):

Templates - C++
всем привет вот у меня тут 1 проблемка кароче выдает ошибку непоиму что я делаю неправилно template &lt;class T&gt; class Array { ...

Перезагрузочные функции( overloaded functions) - C++
Доброго времени суток, помогите пожалуйста понять эту тему. Не могу разобраться, как написать функции, у которых будут одинаковые...

Устронить уведомление: Functions containing switch are not expanded inline - C++ Builder
Вот такое уведмлениесам код#ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- ...

W8027 Functions containing some return statements are not expanded inline - C++ Builder
Доброй ночи. Я этот вопрос уже задавал - но всё же хочу попробовать устранить это предупреждение... Может есть у кого идеи,...

C++ pointers.o4enj,o4enj sro4no.pomogite - Visual C++
u menja takoj vopros,na pisala elemntarnuju programku s pointerami,za peremnnie vzjala 5 i 9. Adres,kotorij mne vidal cifri 5 0xbfb700e0 ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 18:58 #2
Странно, что ругается на первый вариант вариант объявления, он правильный. Второй вариант, очевидно, неверный, вы не добиваетесь того, чего хотите, proc не будет являться указателем на функцию.
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.02.2011, 19:10 #3
-MefistofeL-, Если gcc 4.5+ можно попробовать использовать std::function<T>.
1
-MefistofeL-
21 / 19 / 1
Регистрация: 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
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.02.2011, 22:17 #5
Вот по этой причине рекомендуется выкладывать код полностью. А то вдруг это ваш собственный класс sting. Я ещё обратил внимание на схожесть со string, но потом как раз про самописный класс подумал.
0
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
27.02.2011, 22:42  [ТС] #6
ну... просто большинство народу ленится полностью код читать и забивают с ответом (по себе знаю), поэтому стараюсь кидать только частями, чтобы кто-нибудь да ответил, всеравно спасибо))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 22:42
Привет! Вот еще темы с ответами:

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

Pointers - C++
Здравствуйте, не могу понять принцип указателей, можете пожалуйста объяснить почему в этом коде int main() { int somenumber; ...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2011, 22:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru