将私有数据成员添加到野牛生成的类中
Add private data member to bison generated class
我创建了一个带有以下开头的野牛语法文件:
%skeleton "lalr1.cc"
%require "3.0"
%define api.namespace {MyNamespace}
%define parser_class_name {MyParser}
%language "C++"
当我编译它时,会生成类,一切都很好。 现在我需要保存一个变量,这是一种在各种操作中重用的状态。
我所做的是这样的:
%code provides{
std::shared_ptr<MyClass> current_;
}
它工作正常,但它是一个全局变量,因此会产生各种(主要(问题,例如线程安全和生命周期管理。
我试图实现的是使current_
成为MyParser
或类似东西的私有数据成员(绑定到解析器生存期并且对于每个解析器实例都是唯一的(。
这有可能吗?
据我所知,将成员添加到解析器类的唯一支持方法是通过%parse-param
.但是,这也向解析器类构造函数添加了一个参数,因此它可能不适合您的用例。另外,我不相信它是私人的。
bison手册建议创建一个解析器"驱动程序"类,其中包含解析器上下文(其他成员变量(以及导出的API。驱动程序的实例将添加到分析器类(使用%param
机制(,以便其成员在分析操作中可用。如果您希望成员private
那么您可能需要一些朋友声明。
在 bison 源代码的示例目录中有一个完整的可运行架构示例,并且在 bison 手册中有相当详细的解释。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 将私有数据成员添加到野牛生成的类中
- 通过使用具有私有数据成员的类重载 + 运算符来添加分数
- 为什么添加静态数据成员会导致链接器失败
- 为什么为结构的多个数据成员而不是单个成员添加填充
- 添加/删除具有模板参数的数据成员
- 当派生类添加了数据成员时,派生类的构造函数应该如何像c++中那样
- C++ -<Task> 删除堆上分配的任务数组时,将列表 l(或任何 STL 容器)添加为数据成员会导致错误
- 如何将其他数据成员"number"添加到帐户类?
- 跟踪何时为增强序列化添加数据成员
- 从另一个基类向结构体添加数据成员