首先:v1是而不是的一個變量。理解你編寫的代碼似乎有一些非常基本的問題。 v1是一個模板參數。 「訪問v1」意思就像「訪問字符串」一樣,尤其是因爲v1實際上可能是是字符串。這是無稽之談。當然有參數是數字,但是它又是一樣的:訪問v1將與訪問3相同。不是變量,而只是一個值。
第二:如何訪問「類型」abc變量中的某些內容取決於如何訪問類型散列變量中的某些內容。我不確定hash是什麼,std :: hash只有一個參數,但是如果它的行爲類似於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那樣訪問。
再一次,宏的作用是在編譯代碼之前替換一些代碼。沒有其他的。通常我不會提到它,但是你的問題讓我覺得你沒有意識到這一點。
也就是說,如果你使用這樣的宏,你應該有一個很好的理由。在正常情況下不會推薦它。如果使用錯誤,宏可能非常糟糕。只有在你完全理解你的所作所爲時,才能真正使用它們。我認爲你不會,對不起,但請閱讀該主題。編碼不知道它是如何工作的只會造成挫折。
此外,只能同意一些程序員老兄的回答,「使用」遠比宏在這種情況下好。只需提兩次。
向我們展示您的代碼,在這裏我們看不到任何變量類型,如果您不知道abc是否是一個指針,我們怎麼能看出它的定義呢? – user
你的MACRO應該是什麼? – Jarod42
對於'std :: hash',訪問類似於'abc [key] = value;'。 – Jarod42