自动将C++ 11自动关键字重写为派生类型

问题描述:

也许是一个奇怪的问题,但是有没有任何软件可以使用,它给出了一堆C++ 11代码,派生所有类型的自动类型变量并重写代码与那些派生类型?还适用于初始化列表?自动将C++ 11自动关键字重写为派生类型

推理是我们想提供一个向后兼容版本的代码(非C++ 11),主要是为了与osx一起移植。自动键入和初始化列表是我们最常用的功能,因为它们使代码更易读,但手动删除它们是不行的。因为这实际上是编译器用自动类型化变量做的事情,所以它看起来并不太容易?

+1

libclang来拯救? – sehe 2012-02-29 10:25:50

+0

你能说说@sehe吗? clang是否以这种方式做了些什么?仅供参考,clang 3.0在C++ 11中不支持足够的功能来编译我们的代码。 – 2012-02-29 10:37:24

+1

@BroesDeCat:他建议你使用Clang的编译器库来编译你的代码,然后把它写回去,'auto'全部转换为它们的推导类型。 – 2012-02-29 11:09:00

如果你可以使用Boost,那么你可以看看boost::typeof。它不会完全做auto,但在大多数情况下,它可以通过正则表达式搜索来自动替换。

看BOOST_AUTO和/或BOOST_TYPEOF

你可以代替

auto x = foo(); 

BOOS_AUTO(x, foo()); 

如果你想'管理'decltype你不得不求助于BOOST_TYPEOF。请注意,这两个宏都有一些变体,您需要了解更多关于

听起来像Eclipse CDT的重构插件的一个功能(我实际上早就向我的学生提过这个插件)。可能是下个学期,我可以找到一个团队来创造这样的。但是,Eclipse CDT的信息可能不足以总是确定正确的东西。

对于一些启动器列表,例如那些填充向量的启动器列表,boost :: assign可能是替换。我们的Mockator模拟对象基础架构将这些用于C++ 03,而不是C++ 11中的初始化器列表。

你不应该害怕Boost库,至少不是那些以header-only形式出现的库。那些具有单独的库文件可以轻松地正确设置(最近建立的情况得到改善)。