Verschachtelte Interfaces

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Verschachtelte Interfaces

Beitrag von Josh »

Ich hätte gern verschachtelte Interfaces analog zu den Strukturen, ungefähr so:

Code: Alles auswählen

Interface ITEST1
  a()
  b()
  c()
EndInterface

Interface ITEST2
  d()
  e()
  f()
  Test1.ITEST1
EndInterface

Define Test.ITEST2

Debug Test\Test1\a()
Hat vielleicht jemand einen Trick auf Lager, wie man das simulieren könnte? Verwendung von Strukturen, Prototypes, Macros oder so.

Thxs
Josh
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Verschachtelte Interfaces

Beitrag von helpy »

Hi,

Die Syntax von Interface erlaubt ausschließlich Methoden als Elemente von Interface:
PureBasic Hilfe von [url=http://www.purebasic.com/german/documentation/reference/interfaces.html]Interface[/url] hat geschrieben: Interface <Name> [Extends <Name>]
<Methode[.<Typ>]()>
...
EndInterface
Die einzige Möglichkeit ist die, dass eine Methode ein Interface zurückgibt:

Code: Alles auswählen

EnableExplicit

Interface ITEST1
	a()
	b()
	c()
EndInterface

Interface ITEST2
	d()
	e()
	f()
	GetObjectTest1()
EndInterface

Define oTest2.ITEST2
Define oTest1.ITEST1

oTest1 = oTest2\GetObjectTest1()
oTest1\a()
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Verschachtelte Interfaces

Beitrag von NicTheQuick »

Wenn es nur um das Verschachteln geht, dann kann man das rein mit Structures und Prototypes lösen:

Code: Alles auswählen

Prototype.i Zero()
Prototype.i One(a.i)

Structure mySubClass_new
	a.Zero
	b.One
EndStructure

Structure myClass_new
	a.Zero
	b.One
	d.mySubClass_new
EndStructure

Procedure.i Function_Zero()
	ProcedureReturn 5
EndProcedure
Procedure.i Function_One(a.i)
	ProcedureReturn -2 * a
EndProcedure

Procedure.i Function_Zero_Sub()
	ProcedureReturn 10
EndProcedure
Procedure.i Function_One_Sub(a.i)
	ProcedureReturn a
EndProcedure
	

Procedure myClass_new()
	Protected *this.myClass_new = AllocateMemory(SizeOf(myClass_new))
	
	If (Not *this)
		ProcedureReturn 0
	EndIf
	
	With *this
		\a = @Function_Zero()
		\b = @Function_One()
		\d\a = @Function_Zero_Sub()
		\d\b = @Function_One_Sub()
	EndWith
	
	ProcedureReturn *this
EndProcedure

Define *object.myClass_new = myClass_new()

Debug *object\a()
Debug *object\b(1)
Debug *object\d\a()
Debug *object\d\b(1)
Wie man sieht, ist das dann allerdings etwas komplizierter.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Verschachtelte Interfaces

Beitrag von Chimorin »

Ich habe vorher noch nie von Interfaces gehört, scheinen aber sehr wichtig zu sein :lol:

Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)

Code: Alles auswählen

Interface ITEST1
  a()
  b()
  c()
EndInterface

Interface ITEST2 Extends ITEST1
  d()
  e()
  f()
EndInterface

Define Test.ITEST2

Debug Test\a()
Bild

- formerly known as Bananenfreak -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verschachtelte Interfaces

Beitrag von ts-soft »

Bananenfreak hat geschrieben:Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)
Dein Beispiel entspricht:

Code: Alles auswählen

Interface ITEST2
  a()
  b()
  c()
  d()
  e()
  f()
EndInterface

Define Test.ITEST2

Debug Test\a() 
und das ist nicht das gesuchte :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Verschachtelte Interfaces

Beitrag von Josh »

Bananenfreak hat geschrieben:Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)
Ja, aber eben ohne das Subinterface ^^
NicTheQuick hat geschrieben:Wie man sieht, ist das dann allerdings etwas komplizierter.
Cool, danke. Genau das habe ich gesucht. Besonders wichtig war mir auch, dass die Kommandozeilenhilfe funktioniert.
Ich habe zwar mit Strukturen und Prototypes herumgebastelt, aber nichts zusammengebracht :oops:
Antworten