我有一些严重的实施困境。我们都知道在C ++ 11中允许在下面的例子中做这样的事情,但是a
没有被初始化,所以结果也是未定义的:
int a = 5 + a;
但是,我发现这个符号对我的开源项目的用户来说非常有意义,他们也提供了C ++ 11代码。所以我想用它作为我的项目的API。请考虑以下示例:
Object name = upperCaseLetter & *(lowerCaseLetter | upperCaseLetter);
Object lowerCaseLetter = Object('a') - Object('z');
Object upperCaseLetter = Object('A') - Object('Z');
上述表示法表示name
以大写字母开头,后跟(&
)零或更多(*
)更低或(|
)更高案件信件。较低(或较高)的大小写字母是字符范围(-
)。
另一个例子是:
Object number = (Object('0') - Object('9')) & !number;
符号!
表示可选。因此符号类似于boost :: spirit解析器。但是我在上面的声明中遇到了问题。当我指的是number
对象时,它尚未创建。但是在初始化期间不访问对象数据。所以我想使用指向该对象的指针。但是当我使用指针时,对于像Object('0')
这样的调用,会在声明后创建对象然后销毁。因此指针对于该情况无效。后来我尝试动态分配所有对象数据并使用共享指针。但是,该number
对象的共享指针尚未初始化,因此无法使用。另外将一个对象复制到另一个对象是错误的,因为如上例所示,我们有递归,因此它将在运行时失败。
你知道如何解决这个问题吗? 非常感谢!