C ++ 11 - 如何处理这个特定的声明

时间:2017-09-11 15:56:14

标签: c++ c++11 pointers shared-ptr

我有一些严重的实施困境。我们都知道在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对象的共享指针尚未初始化,因此无法使用。另外将一个对象复制到另一个对象是错误的,因为如上例所示,我们有递归,因此它将在运行时失败。

你知道如何解决这个问题吗? 非常感谢!

0 个答案:

没有答案