<分区>
每当有人可能使用模板元编程来实现目标时,应该考虑哪些经验法则?什么是好示例,其中使用模板元编程比boost 等库以外的普通旧代码更有效?
<分区>
每当有人可能使用模板元编程来实现目标时,应该考虑哪些经验法则?什么是好示例,其中使用模板元编程比boost 等库以外的普通旧代码更有效?
最佳答案
我能想到的一个非常有用的规则是让编译错误尽可能接近“真实”问题。这样一来,不仅可以更轻松地推断出问题,而且对于使用您的库的其他人来说也更容易推断出问题。
这里是我的意思的人为版本:
template<typename Type> struct convert{};
template<> struct convert<double>{ static const int value = D_COORD; };
template<> struct convert<Degree>{ static const int value = ANGLE_COORD; };
template<> struct convert<Radian>{ static const int value = RADIAN_COORD; };
对于尝试 convert<int>
的编译器错误,您将得到一个不太明显的描述。如果您只是将第一个声明设为前向声明,那么它会立即告诉您没有为“转换”定义的类型。
至于一个很好的例子,恐怕我不得不服从别人。但是,您可能想看看 Loki .它不是 Boost,但确实很棒。
关于c++ - 模板元编程经验法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133378/