如果给定模板参数,是不是有可以将模板类转换为实际类的 C++ 工具? [关闭]
Posted
技术标签:
【中文标题】如果给定模板参数,是不是有可以将模板类转换为实际类的 C++ 工具? [关闭]【英文标题】:Is there a C++ tool which can convert template classes to actual classes if template parameter is given? [closed]如果给定模板参数,是否有可以将模板类转换为实际类的 C++ 工具? [关闭] 【发布时间】:2019-03-06 19:24:08 【问题描述】:假设我有一个像
这样的模板类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
和模板参数的工具。
我正在使用模板,并且很好奇是否有任何这样的工具可以很好地学习类型推断?
【问题讨论】:
【参考方案1】:我的意思是,编译器会这样做。您扩展为Foo
的类型实际上应该称为Foo<int>
,如果您在调试器中单步调试已编译的程序,就会看到这一点。
我不知道有任何工具可以进行文本扩展,而且我很确定我不会喜欢为任何非平凡的程序阅读它的输出,尤其是使用标准库容器的程序。
编辑 - 好的,这仍然是题外话,但由于我已经回答,这似乎是相关的:
https://cppinsights.io
像这样扩展您的原始代码 (link)
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()
,只是因为它从未实际使用过。
【讨论】:
谢谢。我一直在寻找这样的工具。我知道我不会使用 STL,而且它的可用性较低。它只是用于学习编译器如何进行类型推导。以上是关于如果给定模板参数,是不是有可以将模板类转换为实际类的 C++ 工具? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章