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

Итераторы, как параметры лябда-функций в шаблонном классе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм поиска в ширину http://www.cyberforum.ru/cpp-beginners/thread917887.html
Подскажите, пожалуйста, алгоритм поиска в ширину в неориентированном графе
C++ Указатели. Найти количество элементов, стоящих на четных местах, удовлетворяющих условию Доброго времени суток! Помогите пожалуйста написать программу! В массиве t(30), сформированном случайным образом, найти количество элементов, стоящих на четных местах, удовлетворяющих условию a<ti<b, где a и b - заданные числа.Указатель. Заранее большое спасибо! http://www.cyberforum.ru/cpp-beginners/thread917881.html
C++ Перегрузка оператора ввода ,вывода
Вообщем проблема такая есть класс в нем приват поля и перегружены 2 дружественных оператора ввода вывода, все хорошо, но дружественный оператор не может получить доступ к закрытым полям класса,помогите в моем недопонимании. вот "куски кода". private : int real; int image; .... public : ....
C++ В массиве, сформированном случайным образом, найти количество элементов, стоящих на четных местах
Помогите сделать указатель. В массиве t(30), сформированном случайным образом, найти количество элементов, стоящих на четных местах, удовлетворяющих условию a<ti<b, где a и b - заданные числа.
C++ Приложение, работающее с фискальным аппаратом http://www.cyberforum.ru/cpp-beginners/thread917856.html
Здравствуйте, обращаюсь к вам за помощью! Возникла острая необходимость написания приложения, работающего с аппаратом для печати чеков. В чем суть: //////// Сложная часть //////// Имеется фискальный аппарат(для печати чеков), подключаемый через COM-порт, причем порт довольно часто изменяется(перетыкается и т.д) Необходимо написать софтину, которая с заданным интервалом времени(5000ms)...
C++ Программа которая открывает текстовый файл и сообщает количество символов в файле Напишите программу, которая открывает текстовый файл, читает его символ за символом до самого конца и сообщает количество символов в файле. Что-то здесь надо поправить,дописать, буду благодарен за помощь. #include <iostream> #include <fstream> #include <cstdlib> int main() { подробнее

Показать сообщение отдельно
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
05.07.2013, 00:58  [ТС]     Итераторы, как параметры лябда-функций в шаблонном классе
Croessmah, ssXXss, спасибо за ответы, Ваши варианты работают, но...
Давайте усложним задачу:

BaseClass.hpp:

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
25
26
27
#ifndef BASECLASS_HPP
#define BASECLASS_HPP
 
template<typename Type> 
class BaseClass
{
public:
    BaseClass(unsigned int NumelemsInVector);
    virtual void action();
    
    std::function<void(std::vector<Type>::iterator)> f;
    std::vector<Type> v;    
};
 
template<typename Type>
BaseClass<Type>::BaseClass(unsigned int NumelemsInVector) : v(NumelemsInVector)
{
    f = [&](std::vector<Type>::iterator arg){*arg += 1;};
}
 
template<typename Type>
void BaseClass<Type>::action()
{
    //Do nothing
}
 
#endif  /* BASECLASS_HPP */

DerClass.hpp:

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
25
26
27
28
29
30
#ifndef DERCLASS_HPP
#define DERCLASS_HPP
 
#include "BaseClass.hpp"
 
template<typename Type> 
class DerClass : BaseClass<Type>
{
public:
    DerClass(unsigned int NumelemsInVector);
    virtual void action() override;
};
 
template<typename Type>
DerClass<Type>::DerClass(unsigned int NumelemsInVector) : BaseClass<Type>(NumelemsInVector)
{
    
}
 
template<typename Type>
void DerClass<Type>::action()
{
    auto CurrentElement = this->v.begin(); 
    for(unsigned int i=0; i<this->v.size(); ++i)
    {
        this->f(CurrentElement);
        CurrentElement++;
    }
}
#endif  /* DERCLASS_HPP */
main.cpp:
C++
1
2
3
4
5
6
#include "DerClass.hpp"
int main()
{
   DerClass<float> obj(5);
   obj.action();
}
Теперь ошибки:
Код
In file included from DerClass.hpp:4:0,
                 from main.cpp:10:
BaseClass.hpp:11:52: ошибка: несоответствия типа/значения в аргументе 1 в списке параметров шаблона для «template<class _Signature> class std::function»
BaseClass.hpp:11:52: ошибка:   ожидался тип, обнаружено «(void)(std::vector<_RealType>::iterator)»
BaseClass.hpp: In constructor «BaseClass<Type>::BaseClass(unsigned int)»:
BaseClass.hpp:18:38: ошибка: «std::vector<_RealType, std::allocator<_Tp1> >::iterator» is not a type
BaseClass.hpp: In lambda function:
BaseClass.hpp:18:53: ошибка: invalid type argument of unary «*» (have «int»)
DerClass.hpp: In instantiation of «void DerClass<Type>::action() [with Type = float]»:
In file included from main.cpp:10:0:
main.cpp:44:16:   required from here
DerClass.hpp:26:9: ошибка: «((DerClass<float>*)this)->DerClass<float>::<anonymous>.BaseClass<float>::f» нельзя использовать как функцию
BaseClass.hpp: In instantiation of «BaseClass<Type>::BaseClass(unsigned int) [with Type = float]»:
In file included from DerClass.hpp:4:0,
                 from main.cpp:10:
DerClass.hpp:15:91:   required from «DerClass<Type>::DerClass(unsigned int) [with Type = float]»
main.cpp:43:26:   required from here
BaseClass.hpp:18:5: ошибка: invalid user-defined conversion from «BaseClass<Type>::BaseClass(unsigned int) [with Type = float]::<lambda(int)>» to «int» [-fpermissive]
BaseClass.hpp:18:50: замечание: candidate is: BaseClass<Type>::BaseClass(unsigned int) [with Type = float]::<lambda(int)>::operator void (*)(int)() const <near match>
BaseClass.hpp:18:50: замечание:   no known conversion for implicit «this» parameter from «void (*)(int)» to «int»
P.S. Сразу хочу попросить не обращать внимания на тело метода action в DerClass - это просто для наглядности написано.

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
Gorillych, и какой по-твоему контекст ([&]) должен быть захвачен по ссылке?
В общем-то, никакого контекста здесь нет - хоть [&], хоть [=] - без разницы. Можно и не лямбду даже.
 
Текущее время: 10:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru