c++ - 如果给定模板参数,是否有可以将模板类转换为实际类的 C++ 工具?
问题描述
假设我有一个模板类
template<class T> class Foo{
T a;
auto baz(){
return 4.2f;
}
};
int main(){
Foo<int> bar;
return 0;
}
是否有可以将此代码转换为实际类并提供输出的工具:
class Foo{
int a;
float baz(){
return 4.2f;
}
};
// main goes below this line
用推导类型替换所有auto
参数和模板参数的工具。
我正在使用模板,并且很好奇是否有任何这样的工具可以很好地学习类型推断?
解决方案
我的意思是,编译器会这样做。您扩展为的类型Foo
实际上应该被称为Foo<int>
,如果您在调试器中单步执行已编译的程序,您将看到这一点。
不过,我不知道有任何工具可以进行文本扩展,而且我很确定我不会喜欢为任何非平凡的程序阅读它的输出,尤其是使用标准库容器的程序。
编辑- 好的,这仍然是题外话,但是,因为我已经回答了,这似乎是相关的:
像这样扩展您的原始代码(链接)
template<class T> class Foo{
T a;
auto baz(){
return 4.2f;
}
};
/* First instantiated from: insights.cpp:9 */
#ifdef INSIGHTS_USE_TEMPLATE
template<>
class Foo<int>
{
int a;
inline auto baz();
// inline Foo() noexcept = default;
// inline constexpr Foo(const Foo<int> &) = default;
// inline constexpr Foo(Foo<int> &&) = default;
};
#endif
int main()
{
Foo<int> bar = Foo<int>();
return 0;
}
你会注意到它永远不会发出Foo<int>::baz()
你想要的,只是因为它从未真正使用过。
推荐阅读
- python - 如何在窗口中获得不同的数字?
- azure-devops - 从私有 docker hub 拉取容器镜像并存储在 azure 容器注册表中
- postgresql - TypeORM 迁移:生成除了 DROP 之外工作得很好
- python - 在两个数字 Django 之间过滤数据
- git - gitignore 模式包含所有类型的文件和包含它们的目录
- bash - 执行定义与现有命令相同的函数的脚本时,Bash 崩溃
- android - 为什么我的 BottomSheetDialogFragment 忽略了我的应用主题?
- node.js - 为我的网站构建一个开放式对话聊天机器人,由 gpt-3 提供支持
- python - QListView 拖动数据包含 UserRole 数据
- python - 为什么我的“old_items_list”等于“items_list”?