首先: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