forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Type - вопросы (http://forum.boolean.name/showthread.php?t=5920)

zheland 16.04.2008 19:32

Type - вопросы
 
Если я использую SuperStrict, то
Можно-ли TObject использовать так?:
Код:

SuperStrict
...
my_list.AddLast(obj1:T_obj1)
my_list.AddLast(obj2:T_obj2)
For obj:TObject = EachIn my_list
...
Next
...

  1. Если НЕТ то как сделать хранение и перечисление разных типов переменных в TList с SuperStrict
  2. Как узнать како-го типа етот объект(настоящий тип(T_obj1,T_obj2), а не TObject)
*Зачем использовать Strict или SuperStrict : ???Ускоряет???
**TLink : Что ето ?

jimon 16.04.2008 20:08

Ответ: Type - вопросы
 
1)и зачем же тебе TObject ? используй наследие
Код:

SuperStrict

Type TBase
        field global_var%
        method Base() abstract
End Type

Type TObj1 extends TBase
        method Base()
                global_var = 1
        end method
End Type

Type TObj2 extends TBase
        method Base()
                global_var = 2
        end method
End Type

Global List:TList = new TList
List.AddLast(new TObj1)
List.AddLast(new TObj2)

for local obj:TBase = eachin List
        obj.Base()
        debuglog obj.global_var
next

List.Clear()
List = null

2) узнать какого типа обьект нельзя
используй для хранения типа дополнительную переменную
и вообще научись программировать так чтобы не нужно было узнавать какого типа обьект

3) Strict, SuperStrict - режими придирания компилятора к коду
SuperStrict не позволит определить переменую без типа
или использовать неопределенную переменую

4)TLink - одиница в TList, часть связаного списка
хранит указатель на предыдущий обьект, следуйший обьект
и указатель на обьект который хранит

TList считай как кинопленка у которой концы склеены
каждый кадр - это TLink
а то что содержит кадр - это то что ты добавил

dimanche13 16.04.2008 21:22

Цитата:

Сообщение от jimon (Сообщение 79661)
2) узнать какого типа обьект нельзя

Можно узнать. Но это отдельная песня (отражение).
Код:

Type myType
        Field xxx:Byte
End Type

Local testobj:myType = New myType

Print TTypeId.ForObject( testobj ).Name()

Хотя думаю ему это ни к чему, так что jimon прав относительно наследования.

drunnik В Tlist можно запхать любой объект. И крутить их все в eachin тоже можно. Примерно так:
Код:

for local o:Object = eachin yourList
  if ( TmyFirstType(o) ) then TmyFirstType(o).method№
  if ( TmySecondType(o) ) then TmySecondType(o).method№
next

Вообще reflection прикольная штуковина, с помощью нее можно узнать какие имена методов в типе, какие названия полей типа, базовый тип это или "родственник", можно создавать любые типы и вызывать из них методы. В общем надо статеку написать, если руки дойдут... и если это вообще кому-то надо будет.

moka 17.04.2008 13:52

Ответ: Type - вопросы
 
jimon, стрицты, они ведь не только влияют на придирчивость? Буржуи говорили что прирост неслабый с суперстрицтом. Это так?

jimon 17.04.2008 17:47

Ответ: Type - вопросы
 
MoKa
имхо, оно влияет на производительность исправляя руки программеру :)

moka 17.04.2008 18:22

Ответ: Type - вопросы
 
Ну и это корректно :)
Хотя, я и так кодил хорошо, просто не указывал и не объявлял какая это переменная, в остальном всё ок, хм, ну хз хз =)

zheland 18.04.2008 22:07

Ответ: Type - вопросы
 
Вопрос: Сколько памяти требует один тип ? МНОГО % МАЛО ?
*просто создал для каждой OpenGl функции свой тип
Цитата из BlitzMax\mod\pub.mod\opengl.mod\opengl.bmx:
Цитата:

Код:

Function glVertex2d(x_:Double,y_:Double)
Function glVertex2dv(v_:Double Ptr)
Function glVertex2f(x_:Float,y_:Float)
Function glVertex2fv(v_:Float Ptr)
Function glVertex2i(x_:Int,y_:Int)
Function glVertex2iv(v_:Int Ptr)
Function glVertex2s(x_:Short,y_:Short)
Function glVertex2sv(v_:Short Ptr)
Function glVertex3d(x_:Double,y_:Double,z_:Double)
Function glVertex3dv(v_:Double Ptr)
Function glVertex3f(x_:Float,y_:Float,z_:Float)
Function glVertex3fv(v_:Float Ptr)
Function glVertex3i(x_:Int,y_:Int,z_:Int)
Function glVertex3iv(v_:Int Ptr)
Function glVertex3s(x_:Short,y_:Short,z_:Short)
Function glVertex3sv(v_:Short Ptr)
Function glVertex4d(x_:Double,y_:Double,z_:Double,w_:Double)
Function glVertex4dv(v_:Double Ptr)
Function glVertex4f(x_:Float,y_:Float,z_:Float,w_:Float)
Function glVertex4fv(v_:Float Ptr)
Function glVertex4i(x_:Int,y_:Int,z_:Int,w_:Int)
Function glVertex4iv(v_:Int Ptr)
Function glVertex4s(x_:Short,y_:Short,z_:Short,w_:Short)
Function glVertex4sv(v_:Short Ptr)


Цитата из "Мой мод":
Цитата:

Код:

Type z3dw_glVertex2d
 Field x : Double , y : Double
 Function Create : z3dw_glVertex2d ( x : Double , y : Double)
    Local ret : z3dw_glVertex2d = New  z3dw_glVertex2d
  ret . x = x
  ret . y = y
  Return ret
 End Function
 Method Draw ( )
  glVertex2d x , y
 End Method
End Type
Type z3dw_glVertex2f
 Field x : Float , y : Float
 Function Create : z3dw_glVertex2f ( x : Float , y : Float )
    Local ret : z3dw_glVertex2f = New z3dw_glVertex2f
  ret . x = x
  ret . y = y
  Return ret
 End Function
 Method Draw ( )
  glVertex2f x , y
 End Method
End Type
...



zheland 20.04.2008 18:12

Ответ: Type - вопросы
 
Насчёт наследия:
не очень понял зачем переменная
Цитата:

сообщение #2:field global_var%
Почему нельзя так?:
Цитата:

Код:


Const z3dw_name_glVertex3i : Byte = 13
Type z3dw_glVertex3i
 ...
Method Obj_Type : Byte ( )
Return z3dw_name_glVertex3i
End Method
End Type


???срадает скорость???

jimon 20.04.2008 19:10

Ответ: Type - вопросы
 
drunnik
global_var показывало переменую общую для двух типов


Часовой пояс GMT +4, время: 20:34.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot