具有冲突名称的类的构造方法

Mat*_*nti 3 c++ constructor class clang

我正在使用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));
}
Run Code Online (Sandbox Code Playgroud)

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

在前面的例子,我想提供的功能fx通过建立它在旅途中的对象.但是,如果我使用f(x(33))它将它解释为对函数的格式错误的调用x,并且如果我使用f(class x(33))它只会产生语法错误.

有明显的解决方法,但我想知道是否有更优雅的方法比使用临时别名来定义类x或显式实例化一个项目会让我烦恼,因为我只需要调用函数的整个范围在函数调用行中.

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

Ste*_*oft 9

你需要的只是一对括号:

f((class x)(33));
Run Code Online (Sandbox Code Playgroud)

或者对于更多参数,也使用统一初始化:

f((class x){1, 2, 3});
Run Code Online (Sandbox Code Playgroud)