c++ - 模板元编程经验法则

标签 c++ templates metaprogramming rules

<分区>

每当有人可能使用模板元编程来实现目标时,应该考虑哪些经验法则?什么是示例,其中使用模板元编程比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/

相关文章:

c++ - 扩展 QChartView

c++ - 我需要有关食人魔相关 header 的帮助(Qgears)

go - 如何在没有模板函数的情况下在 Go 模板中连接字符串?

c++ - SFINAE C++ 方法检查

objective-c - GNU Objective-C 运行时技巧

c++ - 通过内存捕获 MSN 聊天记录

c++ - 将数组拆分为多个数组c++

php - JavaScript 中的 dwoo 模板变量?

C++ 嵌套 SFINAE 模板产生编译错误

macros - Julia 宏中的无效赋值错误