ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 19:50

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - 文字列リテラルで初期化できる変数
作成者 メッセージ
  記事の件名:  文字列リテラルで初期化できる変数  引用付きで返信する
http://www.discoversoft.net/forum/viewtopic.php?t=100
ここのを読んでふと思いついた即席クラスです。
コード:
Class PSTR
Public
	Ptr As BytePtr
	Sub PSTR(p As BytePtr)
		Ptr = p
	End Sub
	
	Function MakeStr() As String
		MakeStr = MakeStr(Ptr)
	End Function
End Class

Class AutoBytePtr
	Inherits PSTR
Public
	Sub AutoBytePtr(p As BytePtr)
		PSTR(p)
	End Sub

	Sub ~AutoBytePtr()
		free(Ptr)
	End Sub
End Class

Class ByteBufStr
	Inherits AutoBytePtr
Public
	Sub ByteBufStr(pStr As BytePtr)
		AutoBytePtr(malloc(lstrlen(pStr) + 1))
		lstrcpy(Ptr, pStr)
	End Sub
End Class
PSTRは単に変数宣言と同時に文字列リテラルへのポインタで初期化できるようにしただけ。
AutoBytePtrはスマートポインタの機能を持たせた。
ByteBufStrは文字列のコピーを作ってそこへのポインタを保持させるようにした。
といった具合です。

そして例えばこんな風に使えます。
コード:
#prompt
Dim p1 As PSTR("Hello,")
Dim p2 As AutoBytePtr(malloc(4))
lstrcpy(p2.Ptr, "AB")
Dim p3 As ByteBufStr("World.")

Print p1.MakeStr(); p2.MakeStr(); p3.MakeStr()
投稿記事 Posted: 2005年6月11日(土) 23:43

全ての表示時間は UTC+09:00 です


ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean