我有兴趣编写一个用于教学目的的工具,用于评估C++表达式并打印其类型.从本质上讲,我的想法是我的学生可以输入任何表达式,程序会回显表达式的类型.是否有现有工具已经这样做了?如果没有,通过与现有编译器集成并调用其调试器或API,是否有一种非常简单的方法可以实现?例如,有人告诉我,Clang有一个相当完整的编译器API,或许有一些方法可以将字符串与相应的include指令一起传递给Clang并让它吐出一个类型?
我意识到如果今天没有什么可以接近的话,这可能是一个巨大的项目.我只是觉得它具有重要的教育价值,所以看起来值得检查.
我想出了一个受Ben Voigt评论启发的答案.只是制作一个错误,让编译器告诉你导致它的类型:
template <typename T> void foo(T); // No definition
int main() {
foo(1 + 3.0);
}
Run Code Online (Sandbox Code Playgroud)
In function `main':
prog.cpp:(.text+0x13): undefined reference to `void foo<double>(double)'
Run Code Online (Sandbox Code Playgroud)
此外,由于您只执行编译器,因此您非常安全.真的,不需要沙箱.如果你得到的不是"未定义的引用void foo<T>(T)",那么它不是表达式.
[编辑]你会如何把它放入工具?简单,用宏
// TestHarness.cpp
// Slight variation to make it a compile error
template <typename T> void foo(T) { typename T::bar t = T::bar ; }
int main() {
foo(EXPR);
}
Run Code Online (Sandbox Code Playgroud)
现在编译$(CC) /D=(EXPR) TestHarness.cpp.每次都可以避免重建输入文件.
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |