お世話様です。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
「指定されたキャストは有効で...
-
SQLインジェクション
-
C# 他のアプリケーションから複...
-
C#のStreamReaderでのforeach
-
ジャバスクリプトについて。
-
ボタンの複数割り当てについて
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
ダブルクォーテーションのrepla...
-
1~100までの数字を表示し、か...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
ArrayListの要素数の上限
-
javaで質問です。 文字列2023/2...
-
配列にnullを代入すると、null...
-
Javaで改行などが出来ないのです。
-
System.out.printlnの出力先
-
ORA-01858: 数値を指定する箇所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
Delphiで改行文字の置換がうま...
-
マルチスレッドで同時にFTPアッ...
-
C#でIPアドレスの取得について
-
【Java8以降】csvファイルの複...
-
strcmp関数などでの複数の文字...
-
strtokでの空文字への置き換え
-
「指定されたキャストは有効で...
-
C#での関数テーブルの作り方
-
string→CStringの型変換について
-
PHPのSHA256変換について
-
C# JSONについて
-
C# visual studio 2017 TCP/IP...
-
GridViewで複数のDropDownList...
-
GDI+ DrawString() で指定範囲...
-
java HashMapで数値データを取...
-
C#で型変換
-
std::stringの継承
-
jap実行時のTomcatのエラーに困...
おすすめ情報