在此article on defining your own extensions to ::std::error_code
作者推荐这段代码:
namespace std
{
template <>
struct is_error_code_enum<http_error>
: public true_type {};
}
为了启用从您自己的错误常量到系统错误类型的转换。
这合理吗?将东西放入 std
命名空间总是让我感到紧张。有没有更好的方法来实现目标?如果做不到这一切,标准中是否有一部分说这样做总是可以的?
最佳答案
是的,现有 std 类型的特化(对于用户定义的类型)是 only 允许放入 std
命名空间的东西,只要特化符合原始模板的要求。
参见 C++0x 草案中的 17.6.4.2.1。
当然,新类型、函数重载和其他任何东西都是被禁止的。但允许对现有模板进行专门化。
关于c++ - 可以将特化注入(inject) std 命名空间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954377/