如果指定了模板参数,是否有C ++工具可以将模板类转换为实际类?

时间:2019-03-06 19:24:09

标签: c++ templates c++17 compiler-options

假设我有一个类似

的模板类
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 个答案:

答案 0 :(得分:5)

我的意思是,编译器会这样做。扩展为callback的类型实际上应称为getHeight(),如果在调试器中逐步执行已编译的程序,则会看到该类型。

我不知道有什么工具可以进行文本扩展,而且我可以肯定我不会喜欢任何非平凡程序的输出,特别是使用标准库容器的程序。


编辑-好的,这仍然是题外话,但是,由于我已经回答了,所以这似乎很重要:

https://cppinsights.io

像这样(link)扩展原始代码

let barHeight;
componentDidMount() {
  barHeight = StatusBarManager.getHeight(statusBarHeight => {
    console.log({ mounted: statusBarHeight });
    barHeight = statusBarHeight;
  });
}

您会发现,它从未发出您想要的Foo,只是因为它从未真正使用过。