C++ 是否可以在一条语句中创建一个对象并调用一个方法?

C++ 是否可以在一条语句中创建一个对象并调用一个方法?,c++,constructor,C++,Constructor,因此,为了避免再次被指控,这里是完整的画面: 我正在实施,当前需要的功能是INFO()。它的工作原理如下: int var1 = 1; { int var2 = 666; INFO(var1 << "some string" << var2); // INFO is a macro // random code... CHECK(var1 == 42); // only if this fails should we see the INF

因此,为了避免再次被指控,这里是完整的画面:

我正在实施,当前需要的功能是
INFO()
。它的工作原理如下:

int var1 = 1;
{
    int var2 = 666;
    INFO(var1 << "some string" << var2); // INFO is a macro
    // random code...
    CHECK(var1 == 42); // only if this fails should we see the INFO text
}
CHECK(var1 == 42); // INFO is scoped and should not be relevant here
InfoBuilder info() << x
Y lvalue = X() << arg1 << arg2;

我的对手将
INFO()
宏实现为一条语句,但问题是
操作符所在的对象似乎没有办法在一条语句中创建对象并对其调用方法

可以创建一个类型为
X
的临时对象并对其调用一个方法,然后只要
Y
具有适当的构造函数,该方法的结果就可以分配给类型为
Y
的本地对象,如下所示:

int var1 = 1;
{
    int var2 = 666;
    INFO(var1 << "some string" << var2); // INFO is a macro
    // random code...
    CHECK(var1 == 42); // only if this fails should we see the INFO text
}
CHECK(var1 == 42); // INFO is scoped and should not be relevant here
InfoBuilder info() << x
Y lvalue = X() << arg1 << arg2;

不知道为什么我昨晚没有想到这一点…

简单地
#define INFO(x)InfoBuilder()如何,它会一直保持活动状态直到下面的断言出现?它不会马上消失吗?如果这是可能的,我会非常高兴,如果你给它起一个名字,那么是的,只要这个名字在范围内,它就会一直存在。如果它没有名字,那么没有,它将立即死亡。您没有说由
INFO()
创建的对象必须生存并可供
CHECK()
使用。但是,如果将
INFO()
宏实现为一条语句,您为什么会在意呢?它不需要是,您可以在其中包含多个语句:
#define INFO(x)InfoBuilder anon_name;anon_名称在这种情况下,我确实需要一个名称-需要为整个范围“捕获”变量-并且只有当断言无法字符串化/打印它们时,为什么这会阻止您实现Catch的功能?只需给
InfoBuilder
一个复制/移动构造函数或
swap()
方法,
INFO()
就可以使用该方法将相关指针从一个实例移动到另一个实例,而无需重新分配任何内容<代码>#定义信息(x)InfoBuilder名称(InfoBuilder()
#define INFO(x) InfoScope ANONYMOUS(_CAPTURE_)(InfoBuilder() << x)