我想在我的命名空间中使用来自另一个命名空间的东西,而不是将它作为我的命名空间的一部分。更具体我有以下情况:
namespace my_ns{
enum class c: unsigned long long int{};
namespace literals{
constexpr c operator"" _c(unsigned long long int i)noexcept{
return c(i);
}
}
using namespace literals;
auto xyz = 4_c; // OK: use literals::operator""_c
}
void some_function(){
using namespace my_ns; // shall not implicit include my_ns::literals!
auto abc = xyz; // OK
auto def = 4_c; // shall not know my_ns::literals::operator""_c
}
我想在my_ns
中使用用户文字,但与std
和std::literals
的{{1}}之后的some_function
不一致。你认为一致性论证值得头痛吗?
如果是,有没有办法做或做类似的事情?
答案 0 :(得分:2)
您可以尝试使用嵌套的detail
命名空间,然后只将您想要的内容公开给主my_ns
命名空间:
namespace my_ns
{
namespace detail
{
using namespace literals;
auto xyz = 4_c; // OK: use literals::operator""_c
}
using detail::xyz;
}
答案 1 :(得分:0)
您可以使用另一个名称空间,然后将其公开给所有人
namespace Rtos
{
constexpr unsigned long long operator "" ms(unsigned long long ms)
{
return ms / portTICK_PERIOD_MS ;
} ;
}
namespace GlobalVars
{
using Rtos::operator""ms ;
Rtos::Event event{1000ms, 1} ;
}
using GlobalVars::event ;
void SomeFunction()
{
event.Signal();
}