Войти
ПрограммированиеФорумОбщее

Проверка существования переменной или функции-члена (2 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#15
16:01, 19 дек. 2008

cNoNim

>=A=L=X=
>чтото ты не то советуешь...
>ты собрался применять тайп кастинг к тому, что получил из пакета?

ммм... по моему ты его плохо понял. он не к запросу или чему-то вытащенному из запроса говорил что будет делать проверку метода, а исходя из запроса чего-то-там вызывать.


#16
16:03, 19 дек. 2008

Zefick
я к тому, что имхо автору механизмы рефлексии для решения его задачи не нужны, а вполне можно обойтись наследованием и интерфейсами.

#17
16:03, 19 дек. 2008

=A=L=X=
я его как раз таки понял :)
хотя может и не понял...
но тайпкастинг все равно не поможет
у него есть объект реализующий все действия
и запрос.. допустим с именем функции
и он хочет каким нить магическим методом
без условных переходов понять есть такая функция или нет

#18
16:06, 19 дек. 2008

Автору следует на PHP и остановиться если ему без этого жить сложно.

#19
16:07, 19 дек. 2008

Вот придумал как можно реализовать данную проблему с помощью указателей на функцию.
#include <iostream>
#include
#include <string>

using namespace std; 

typedef int (*FuncPtrType)(int, int);
FuncPtrType my_func;

map<string, FuncPtrType> mapF;


int min(int a, int b)
{
  if (a < b)
    return a;
  else
    return b;
}

int max(int a, int b)
{
  if (a > b)
    return a;
  else
    return b;
}

int _tmain(int argc, _TCHAR* argv[])
{
  mapF.clear();
  mapF["min"] = min;
  mapF["max"] = max;

  if(mapF["min"])
    cout << mapF["min"](123,321) << endl;
  cout << mapF["max"](123,321);
  return 0;
}

у данного метода есть несколько минусов
1. при запуске приложения мы должны заполнить массив
2. ф-ции должны пронимать и возвращать одинаковые параметры

Но думаю данный метод имеет право на жизнь.

#20
16:12, 19 дек. 2008

KpeHDeJIb
Пример из рнр - существует контроллер, например options, выполняющий несколько запросов посредством http заголовка, пускай будет edit и clean.  Когда пользователь запрашивает /options/edit/ front controller пытается выполнить метод edit класса options. А если пользователь запросит другую страницу? В таком случае возникает необходимость проверить наявность метода в рпеделах данного класса.

$tatic
Каким образом то о чем я говорю противоречит концепции ооп?

#21
16:16, 19 дек. 2008

cNoNim
>пруф? про typeof?
Извиняюсь, ошибся. Есть ключевое слово typeid.

#22
16:17, 19 дек. 2008

majesty
>KpeHDeJIb
>Пример из рнр - существует контроллер, например options, выполняющий несколько
>запросов посредством http заголовка, пускай будет edit и clean. Когда
>пользователь запрашивает /options/edit/ front controller пытается выполнить
>метод edit класса options. А если пользователь запросит другую страницу? В
>таком случае возникает необходимость проверить наявность метода в рпеделах
>данного класса.

Ну я же и объясняю!
if ( dynamic_cast< COptions >( new_options_tab ) )
{
  // здесь мы поняли что действительно имеем дело с опциями и все его методы нам доступны
  ... // пошла КОЛБАСА!!! =)
};

#23
16:17, 19 дек. 2008

Да, ппц, во-первых концепция ООП тут абсолютно и совершенно не при чем. Во-вторых я ничерта не понял что ты за пример привел.
Если ты строишь поведение страницы в зависимости от request string то тебе и PHP не поможет.

#24
16:17, 19 дек. 2008

majesty
>Каким образом то о чем я говорю противоречит концепции ооп?
Насколько мне известно, никаким. Однако это противоречит концепции С++. Нету в языке reflection.
Касаемо примера с пхп - это хреновое решение, так как позволяет вызывать произвольные методы у класса с помощью http-запроса. То, что метод существует, еще не означает что его можно вызывать всем.

#25
16:18, 19 дек. 2008

Zefick
лучше читай мсдн внимательней
tipeid это C++/CLI

#26
16:19, 19 дек. 2008

Вы видели мой пример?
Чем он вам не нравится?

#27
16:21, 19 дек. 2008

Zefick
typeid относится к RTTI но все равно не решает поставленную ОПом задачу, он не ищет класс и не позволяет
проверить наличие метода этого класса. Легко заменяется вводом метода getName() в базовый класс и его
последующим переопределением, если RTTI за собой таскать неохота.

ЗЫ. Я до сих чувствую что мы костылями балуемся...

#28
16:23, 19 дек. 2008

AndreSt
Вводить руками плохой вариант, в таком случае проще создать в классе переменную которая будет хранить список доступных методов.

#29
16:25, 19 дек. 2008

Конишуа
Касаемо примера рнр существует много вариантов ограничения доступа, например, как реализовано в code ingniter и kohanaphp - недоступные методы отмечаются _ в начале названия.

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.