【发布时间】:2019-05-15 23:37:00
【问题描述】:
正如之前回答的那样,namespacing operator overloads is considered good practice,所以这就是我想要做的。
问题:如果我不这样做,它只会编译。是我做错了,还是发现了不可能的异常?
这是一个便于复制的翻译单元:
// lib/halfseconds.h:
#include <chrono>
namespace lib {
using halfseconds = std::chrono::duration<intmax_t, std::ratio<1, 2> >;
}
// lib/debug.h:
#include <ostream>
namespace lib {
std::ostream& operator<<(std::ostream& o, lib::halfseconds halves)
{
double seconds = halves.count();
seconds /= lib::halfseconds::period::den;
o << seconds << 's';
return o;
}
}
// demo/main.cpp:
#include <iostream>
int main()
{
lib::halfseconds threeHalvseconds(3);
std::cout << threeHalvseconds << '\n'; // 1.5s
}
编译器是怎么说的? G++ 版本 8.2.1 说 «no match for operator
【问题讨论】:
-
这与它被标记为重复的问题之间的一个区别似乎是在这种情况下将
operator<<放入命名空间lib 并不能像解决其他问题一样解决问题。 -
没有。 “命名空间”是一个名词。你不能动词它。
-
我可以动词“空间”,因此我可以动词“命名空间”。
标签: c++ namespaces operator-keyword