まず、v1はではなく、という変数です。あなたは、あなたが書いたコードを理解するのに非常に根本的な問題があるようです。 v1はテンプレートパラメータです。 「v1へのアクセス」とは、特にv1が実際にとなる可能性があるため、「アクセス文字列」と同じ意味です。文字列です。ナンセンスです。もちろん数値であるパラメータもありますが、同じことがもう一度あります。v1へのアクセスは3へのアクセスと同じです。変数ではなく、値のみです。
第2:「タイプ」の変数の中で何かをアクセスする方法は、タイプがhashの変数で何かにアクセスするかによって決まります。私はハッシュが何であるかは分かりませんが、std :: hashには1つのパラメータしかありませんが、std :: mapのように振舞うと、通常は[] -bracketsでアクセスします。
はのは、例をやってみましょう:
#define MyMap std::map<string, string>
MyMap create_some_map(){
MyMap result;
result["name"] = "john";
return result;
}
int main(){
MyMap some_map = create_some_map();
std::cout << some_map["name"] << std::endl;
return 0;
}
はそれは難しいことではなかったしませんか?
MyMapがstd :: pairの代わりである場合、some_map.first = ...およびsome_map.second = ...などで要素にアクセスします。 MyMapがEigenライブラリの行列のようないくつかの行列型の場合、おそらくsome_map(i、j)= 4のようにアクセスするでしょう。
もう一度、マクロをコンパイルする前に。他に何もない。通常は言及しませんが、あなたの質問は私があなたがそれを認識していないと思うようにします。
これは、そうしたマクロを使用すると非常に良い理由があるはずです。通常の状況下では推奨しません。間違って使用すると、マクロがかなり悪くなる可能性があります。あなたが本当にあなたの仕事を救うとき、そしてあなたがしていることを絶対に理解しているときだけ、それらを使用してください。私はあなたがいないと思う、申し訳ありませんが、その件名を読んでください。どのように動作するのかを理解していないコーディングは、欲求不満の原因になります。
また、いくつかのプログラマーの答えにのみ同意することができます、 "使用"はこの状況でマクロよりはるかに優れています。ちょうどこれを2回言及する。
abcがポインタであるかどうかわからない場合は、ここで変数の型を見ることはできません。どうやってその定義を見てもわからないのですか? – user
MACROは何を想定していますか? – Jarod42
'std :: hash'の場合、アクセスは' abc [key] = value; 'のようになります。 – Jarod42