我有基类,它是一些数据的泛型解析器,我有多个派生类,它们提供了对解析器中包含的数据的特定访问接口。只有在解析完所有数据之后,我才能确定派生类的类型,因为它依赖于层次结构(有一个基类树,需要完全填充它才能确定每个基类的派生类)。
从基类创建派生类的最佳方式是什么,避免不必要的数据复制?到目前为止,我正在使用base的复制构造函数创建派生的(如下所示):
class Base
{
};
class Derived : public Base
{
Derived(const Base &base)
: Base(base)
{
}
};
,但这需要复制所有的基本数据,这是不
对于任何输入,下面的解析器进入一个无限循环。
data Ast
= Number Int
| Identifier String
| Operation Ast BinOp Ast
deriving (Show, Eq)
data BinOp = Plus | Minus
deriving (Show, Eq, Enum)
number = Number <$> read <$> many1 digit
identifier = Identifier <$> many1 letter
operator = ch