gpt4 book ai didi

c++ - 如何使用命名空间中定义的运算符?

转载 作者:行者123 更新时间:2023-12-04 16:52:26 25 4
gpt4 key购买 nike

我在命名空间中定义了一个运算符,如下所示:

namespace Foo {
class Bar {
public:
Bar(double val): baz(val) {}
// Rest of my object here

private:
double baz;

};

namespace Qux {
Bar operator ""
_quux(long double opd) {
return Bar(opd / 10);
}
}
}



int main() {
using namespace Foo::Qux;
std::cout << "100_quux" << std::endl;

}
如何在不引入 Foo::Qux 的情况下使用运算符命名空间进入我的 main()范围?

最佳答案

您不能限定用户定义文字的命名空间,例如

std::cout << 100.0Foo::Qux::_quux << std::endl
但是您可以做的是使用 using 语句将文字运算符导入 main使用
using Foo::Qux::operator""_quux;
你会像这样使用它
std::cout << 100.0_quux << std::endl;
您也可以手动调用接线员,例如
std::cout << Foo::Qux::operator""_quux(100.) << std::endl;

另一种选择是将您的用户定义文字放入名为 literals 的命名空间中。然后你就可以将它导入到 main 中。那看起来像
namespace Foo {
class Bar {
public:
Bar(double val): baz(val) {}
// Rest of my object here

private:
double baz;

};

namespace Qux {
inline namespace literals {
Bar operator ""_quux(long double opd) {
return Bar(opd / 10);
}
}
// other Qux Members
}
}



int main() {
using namespace Foo::Qux::literals;
std::cout << 100.0_quux << std::endl;

}
请注意,文字是一个内联命名空间,因此 Qux仍然可以访问成员而无需额外的资格。

关于c++ - 如何使用命名空间中定义的运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68562873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com