gpt4 book ai didi

c++ - 打印任意 C++ 表达式的类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:15 31 4
gpt4 key购买 nike

我有兴趣编写一个用于教学目的的工具来计算 C++ 表达式并打印它们的类型。本质上,我的想法是我的学生可以输入任何表达式,程序会回显表达式的类型。是否有现有工具可以执行此操作?如果没有,是否有一种非常简单的方法可以通过与现有编译器集成并调用其调试器或 API 来实现?例如,有人告诉我,Clang 有一个相当完整的编译器 API,也许有一些方法可以将字符串连同适当的 include 指令一起传递到 Clang 并让它吐出一个类型?

我意识到,如果目前还没有类似的项目,这可能是一个巨大的项目。我只是认为它具有重要的教育值(value),所以它似乎值得一试。

最佳答案

我根据 Ben Voigt 的评论得出了一个答案。只需制造一个错误,让编译器告诉您导致它的类型:

template <typename T> void foo(T); // No definition

int main() {
foo(1 + 3.0);
}

Result:

In function `main':
prog.cpp:(.text+0x13): undefined reference to `void foo<double>(double)'

此外,由于您只执行编译器,因此非常安全。不需要沙盒,真的。如果您得到除“对 void foo<T>(T) 的 undefined reference ”以外的任何内容,则它不是表达式。

[edit] 你会如何将其放入工具中?简单,用宏的

// 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);
}

现在用$(CC) /D=(EXPR) TestHarness.cpp编译.避免您每次都重建输入文件。

关于c++ - 打印任意 C++ 表达式的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601533/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com