使用哈希表中的属性存储函数名称

时间:2016-06-06 18:41:04

标签: c++

假设我有以下程序:

__attribute__((annotate("ex"))) void ex() {};
void val() {};

__attribute__((annotate("foo"))) void foo() {
 ex();
cout<<"You have called a function with an attribute"<<endl;
val();
cerr<<"Error!You have called a function without an attribute"<<endl;
}

int main()
{
foo();
return 0;
}

如果你观察,main()调用foo()和foo()依次调用ex()和val()。当调用ex()时没有问题,因为它有一个与之关联的属性但是当它调用val(),它应该显示错误消息,指出此函数没有任何属性。

因此,为此,我需要跟踪哈希表中具有属性且没有属性的函数,并在调用函数时检查它。

并且,我不知道如何做到这一点?我现在希望它清楚。

1 个答案:

答案 0 :(得分:0)

看起来您需要使用结构

我会给你一个参数,你可以扩展到一个函数。

函数参数具有名称类型

struct Function_Parameter
{
  std::string name;
  std::string type;
};

一个函数还有一个名称和一个返回类型:

struct Function_Token
{
  std::string name;
  std::string return_type;
};

函数可以包含零个或多个参数。因此通常意味着某种容器。因此,请使用std::vector

struct Function_Token
{
  std::string name;
  std::string return_type;
  std::vector<Function_Parameter> parameters;
};

许多编译器可能会将名称转换为数值(使用某种散列函数或表格)。这通常会加快编译速度,因为字符串需要很长时间才能进行比较。