具有冲突名称的 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});
我正在使用 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});