
お世話様です。
C++で関数ポインタを使用していたのですが、C#にそのまま持ってくると
エラーが発生します。
C++でのコードをどのように変更したら良いでしょうか。
[C++]
typedef struct {
char *cmd;
BOOL (*exe)(char* oprand);
}FTBL;
FTBL tbl[] = {
{ "AAA", aaa },
{ "BBB", bbb },
{ "CCC", ccc }
};
[C#](当方のコードでエラーがでます。)
delegate bool Execute( string oprand );
struct FTBL{
string cmd;
Execute exe;
};
FTBL[] tbl = {
{ "AAA", aaa },
{ "BBB", bbb },
{ "CCC", ccc }
};
コマンド名とコマンド関数のテーブルですが、要は関数テーブルの
作り方を知りたいのです。
ご教授よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
> キーにコマンド(文字列)バリューに関数アドレス入力してハッシュ関数
> クリエイトしたあと、オペレートでキーを入力して、一致したら
> 勝手に実行みたいなのが使い方ができるのでしょうか?
delegate bool Execute( string oprand );
class Entry {
static bool aaa(string op)
{ System.Console.WriteLine("aaa "+op); return true; }
static bool bbb(string op)
{ System.Console.WriteLine("bbb "+op); return true; }
static bool ccc(string op)
{ System.Console.WriteLine("ccc "+op); return true; }
static public void Main() {
System.Collections.Generic.Dictionary<string,Execute> map =
new System.Collections.Generic.Dictionary<string,Execute>();
map["AAA"] = aaa;
map["BBB"] = bbb;
map["CCC"] = ccc;
map["BBB"]("argument");
}
}
まいど、ありがとうございます。
なるほど、1さんが述べられたことの意味がやっとわかりました。
私の知識が足りなかっただけですね…。
なかなか粋なコードなりました。ありがとうございました。
No.2
- 回答日時:
# ここでC#の質問をしてもいいものやら疑問に思いつつも…
delegate bool Execute( string oprand );
struct FTBL {
public string cmd;
public Execute exe;
public FTBL(string c, Execute e)
{ cmd = c; exe = e; }
};
class Entry {
static bool aaa(string op)
{ System.Console.WriteLine("aaa "+op); return true; }
static bool bbb(string op)
{ System.Console.WriteLine("bbb "+op); return true; }
static bool ccc(string op)
{ System.Console.WriteLine("ccc "+op); return true; }
static public void Main() {
FTBL[] tbl = new FTBL[] {
new FTBL("AAA", aaa),
new FTBL("BBB", bbb),
new FTBL("CCC", ccc)
};
foreach ( FTBL item in tbl ) {
item.exe(item.cmd);
}
}
}
まいど!お世話になってます。
なるほろ~。構造体でもコンストラクタ使えるんですね。
当方のコード、メモリ確保の観点からしても滅茶苦茶でしたね(^^;
ありがとうございます。勉強になりました。
またお願いします。
># ここでC#の質問をしてもいいものやら疑問に思いつつも…
やっぱり、VBの方がいいですかね(笑
No.1
- 回答日時:
そもそもわざわざ構造体を自作しなくても、.NET Framework 組み込みのハッシュテーブルを使えばいいと思いますが。
組み込みのハッシュテーブルとは System.Collections.Hashtable クラスのことです。
(バージョン 2.0 なら新しく追加された System.Collections.Generic.Dictionary クラスの方をお奨めします)
この回答への補足
回答ありがとうございます。
ハッシュテーブルでキーの検索は高速になりますね。
"AAA"->0, "BBB"->1 とか…。
今回はインデックスの取得方法ではないので、意図が違います。
(その意図を書いていない私も私ですが…)
もしかして、ハッシュのキーとバリューの関係上で
キーにコマンド(文字列)バリューに関数アドレス入力してハッシュ関数
クリエイトしたあと、オペレートでキーを入力して、一致したら
勝手に実行みたいなのが使い方ができるのでしょうか?
ありがとうございます。
私の知識が足りなかっただけでした。(;;
1さんの仰っていることは正しかったです。
今後もよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
string→CStringの型変換について
-
strtokでの空文字への置き換え
-
java DAO 日付指定フォーマット...
-
オブジェクトの中のプロパティ...
-
動的配列が存在(要素が有る)か...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
JSPでの計算結果表示
-
System.err. printlnとSystem.o...
-
C#で、あるクラスのメンバーす...
-
ループ処理の際、最後だけ","を...
-
IF関数でEmpty値を設定する方法。
-
JSPやサーブレットでSystem.out...
-
javaで質問です。 文字列2023/2...
-
<forEach> 内で供給された "ite...
-
ページング
-
jspでの二次元配列
-
日付や時刻の"01"を" 1"に変換...
-
javascriptで文字列のsjis利用...
-
この警告はどうすれば?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Java8以降】csvファイルの複...
-
C# ListBoxのアイテムをユーザ...
-
マルチスレッドで同時にFTPアッ...
-
strcmp関数などでの複数の文字...
-
特定の文字列が一致する行から...
-
デバックができない C#
-
「(string)$i」のような変則な文
-
C#でIPアドレスの取得について
-
★C#のXML読み込みについて
-
p->next(ポインタ)的なことを...
-
jap実行時のTomcatのエラーに困...
-
string→CStringの型変換について
-
C#についてです
-
プログラミングC++に関して質...
-
ArrayListを改良したい
-
コンストラクタの変数を別のコ...
-
「指定されたキャストは有効で...
-
C# List型のIndesOf メゾットに...
-
strtokでの空文字への置き換え
-
C#での関数テーブルの作り方
おすすめ情報