如何使用命名空间中定义的运算符?
How to use operators defined in namespaces?
我在命名空间中定义了一个运算符,如下所示:
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
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
仍然可以访问成员而无需额外的限定。
我在命名空间中定义了一个运算符,如下所示:
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
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
仍然可以访问成员而无需额外的限定。