具有冲突名称的 class 的构造函数

Constructor of class with conflicting name

我正在使用 clang 使用 c++14 方言编译我的代码。举个例子:

class x
{
    int _i;

public:

    x(int i)
    {
        this->_i = i;
    }
};

void x()
{
}

void f(class x my_x)
{
    // Do something here
}

int main()
{
    /*
     f(x(33)); // Doesn't work
     f(class x(33)); // Doesn't work
    */

    // This works:

    class x my_x(33);
    f(my_x);

    typedef class x __x;
    f(__x(33));
}

这里我有一个名为 x 的 class,其名称与同名函数冲突。要区分 x、class 和 x 函数,必须使用 class 标识符。这在所有情况下都适用于我,但我永远找不到直接调用 x 的构造函数的方法。

在前面的示例中,我想通过在移动中构建对象来为函数 f 提供 x 对象。但是,如果我使用 f(x(33)),它会将其解释为对函数 x 的格式不正确的调用,而如果我使用 f(class x(33)),它只会产生语法错误。

有明显的解决方法,但我想知道是否有比使用临时别名对 class x 进行类型定义或显式实例化一个项目更优雅的方法调用函数,而我只在函数调用的行中需要它。

也许有一个我不知道的简单语法?

你只需要一对括号:

f((class x)(33));

或者更多的参数,同样使用统一初始化:

f((class x){1, 2, 3});