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

Оператор [] массива указателей на процедуры и методы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, которая по заданным координатам точки (x,y) определяет на какой линии или внутри какой области находится эта точка http://www.cyberforum.ru/cpp-beginners/thread662534.html
Построить чертеж. Обозначить получившиеся области плоскости. Составить программу, которая по заданным координатам точки (x,y) определяет на какой линии или внутри какой области находится эта точка.
C++ Шахматы, конь Всем доброго времени суток! Буду честен - в универе задали задачу на макс.балл(все предыдущие сделал, но с этой возникла проблемка). Условие следующее: Поле шахматной доски определяется парой... http://www.cyberforum.ru/cpp-beginners/thread662526.html
При работе с символами адрес вместо адреса иероглифы, а с символьными массивами вобще ошибки. C++
/* 1) int a; int *b=&a; cout<<b<<endl; 2) char a; char *b=&a; cout<<b; */ Надо просто выдать адреса переменных. При работе с числами всё нормас. При работе...
Составить программу для вычисления значения выражения (без использования макрокоманды MAX и MIN) C++
C++ задачка с натуральными числами http://www.cyberforum.ru/cpp-beginners/thread662512.html
программа, которая в записи натурального числа минимальным вычеркиванием цифр оставляет подряд идущие цифры, которые 1) образ отрезок натурального ряда; 2) образ строго возрастающую...
C++ Заполнить двумерный массив заполнить двухмерный массив размерности по правилу: 6 1 1 1 1 5 2 6 1 1 5 4 2 2 6 5 4 4 2 2 5 6 4 4 2 5 3 3 6 4 5 3 3 3 3 6 подробнее

Показать сообщение отдельно
SavoninDima
0 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 5
03.10.2012, 11:50  [ТС]
Цитата Сообщение от I.M. Посмотреть сообщение
как вариант
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
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <functional>
#include <vector>
 
class test_class
{
public:
    typedef std::function<int (int)> functor_t;
 
    functor_t& operator [] (int index)
    {
        if(index < 0 || index > m_array.size())throw std::exception("out of range");
 
        if(index == m_array.size())
            m_array.push_back(0);
 
        return m_array[index];
    }
 
private:
    typedef std::function<int (int)> functor_t;
 
    std::vector<functor_t> m_array;
};
 
int some_function(int value)
{
    std::cout << "hello " << value << std::endl;
    return 0;
}
 
int main()
{
    test_class object;
    object[0] = std::bind(some_function, std::placeholders::_1);
    object[0](42);
 
    system("pause");
}
Добавлено через 20 минут

Небольшая ремарка по своему же коду. Лучше вынести добавление нового элемента в отдельный метод. Ибо так, как есть сейчас, очень небезопасно и нелогично.
Отлично, сейчас опробую. Спасибо.

По поводу ремарки, сам столкнулся с данной проблемой когда свой метод допиливал. Уже так и сделал.

Добавлено через 5 минут
Ругается компилятор на ваш метод:
Ошибка 1 error C2064: результатом вычисления фрагмента не является функция, принимающая 1 аргументов c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap 431 1 Empty
VC12

Добавлено через 6 минут
Все исправил ошибку, и думаю, что лучше использовать массив, а не вектор.

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

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
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <functional>
#include <vector>
 
#define MAXFUNCTION 255
 
class test_class
{
private:
    typedef std::function <int (int)> function_t;
    function_t m_array [MAXFUNCTION];
 
public:
    function_t& operator [] (int Index)
    {
        return m_array[Index];
    }
 
    function_t& operator () (int Index)
    {
        return m_array[Index];
    }
};
 
int some_function(int value)
{
    std::cout << "hello " << value << std::endl;
    return 0;
}
 
int main()
{
    test_class object;
 
    object(13) = some_function;
    object(10) = some_function;
 
    object[13](3);
    object[10](5);
 
    system("pause");
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru