在现代编译器中如何实现泛型?
我的意思是我们如何从某些模板T add(T a, T b) ...进入生成的代码?我已经想到了几种方法来实现,我们将通用函数存储在AST中Function_Node,然后每次使用它时,都会在原始函数节点中存储其自身的副本,其中所有类型都T替换为正在使用。例如add<int>(5, 6)将存储的通用功能的副本add并替换所有类型T 的副本有int。 所以它看起来像: struct Function_Node { std::string name; // etc. Type return_type; std::vector<std::pair<Type, std::string>> arguments; std::vector<Function_Node> copies; }; 然后,您可以为这些代码生成代码,并在访问Function_Node副本列表所在的位置时copies.size() > 0调用visitFunction所有副本。 visitFunction(Function_Node& node) { if (node.copies.size() > 0) { for (auto& node : nodes.copies) { visitFunction(node); } // it's a generic function so we …