自动将C++ 11自动关键字重写为派生类型
问题描述:
也许是一个奇怪的问题,但是有没有任何软件可以使用,它给出了一堆C++ 11代码,派生所有类型的自动类型变量并重写代码与那些派生类型?还适用于初始化列表?自动将C++ 11自动关键字重写为派生类型
推理是我们想提供一个向后兼容版本的代码(非C++ 11),主要是为了与osx一起移植。自动键入和初始化列表是我们最常用的功能,因为它们使代码更易读,但手动删除它们是不行的。因为这实际上是编译器用自动类型化变量做的事情,所以它看起来并不太容易?
答
看BOOST_AUTO和/或BOOST_TYPEOF
- http://www.boost.org/doc/libs/1_48_0/doc/html/typeof/refe.html
- http://www.boost.org/doc/libs/1_48_0/doc/html/typeof/refe.html#typeof.typo
你可以代替
auto x = foo();
与
BOOS_AUTO(x, foo());
如果你想'管理'decltype你不得不求助于BOOST_TYPEOF。请注意,这两个宏都有一些变体,您需要了解更多关于
答
听起来像Eclipse CDT的重构插件的一个功能(我实际上早就向我的学生提过这个插件)。可能是下个学期,我可以找到一个团队来创造这样的。但是,Eclipse CDT的信息可能不足以总是确定正确的东西。
对于一些启动器列表,例如那些填充向量的启动器列表,boost :: assign可能是替换。我们的Mockator模拟对象基础架构将这些用于C++ 03,而不是C++ 11中的初始化器列表。
你不应该害怕Boost库,至少不是那些以header-only形式出现的库。那些具有单独的库文件可以轻松地正确设置(最近建立的情况得到改善)。
libclang来拯救? – sehe 2012-02-29 10:25:50
你能说说@sehe吗? clang是否以这种方式做了些什么?仅供参考,clang 3.0在C++ 11中不支持足够的功能来编译我们的代码。 – 2012-02-29 10:37:24
@BroesDeCat:他建议你使用Clang的编译器库来编译你的代码,然后把它写回去,'auto'全部转换为它们的推导类型。 – 2012-02-29 11:09:00