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

6
也许这是一个奇怪的问题,但是否有可用的软件可以提供一堆c++11代码,并推导出所有自动类型变量的类型,并使用这些推导出的类型重写代码?还有初始化列表?
我们的理由是,我们想提供我们代码的向后兼容版本(非C++11),主要是为了与osx的可移植性。自动类型和初始化列表是我们最常用的功能,因为它们使代码更易读,但手动删除它们是不可行的。 由于编译器实际上就是这样处理自动类型变量的,所以这似乎并不太牵强?

你能详细说明一下吗,@sehe?clang是否以这种方式做了些什么?顺便说一句,clang 3.0不支持足够的C++11特性来编译我们的代码。 - Broes De Cat
1
@BroesDeCat:他建议您使用Clang的编译器库来编译您的代码,然后将其写回,并将所有auto转换为其推导类型。 - Nicol Bolas
请注意:这里所说的“推导”是指类型从初始化器中推导出来。 - Xeo
1
我喜欢提出的解决方案,但它仍然没有解决整个问题,而且我们目前也没有使用boost。没有其他的解决方案吗? - Broes De Cat
翻译内容如下:复制链接 https://dev59.com/6mox5IYBdhLWcg3w1Xy-?rq=1 和 https://stackoverflow.com/questions/18508512/automate-backporting-c11-auto-declarations?lq=1。结论是对于至少某些情况下的auto关键字使用,这是不可能的。 - dshepherd
3个回答

3

2
如果您可以使用 Boost,那么您可能需要看一下 boost::typeof。它不能完全替代 auto 所做的事情,但在大多数情况下,它可以通过正则表达式捕获自动替换。

1
听起来像是针对Eclipse CDT的重构插件的一个功能(我之前曾向我的学生提议过这样做)。也许下个学期我可以找到一个团队来创建这样的插件。然而,Eclipse CDT的信息可能不足以始终确定正确的内容。
对于一些初始化列表,例如那些填充向量的列表,boost::assign可以作为替代方案。我们的Mockator模拟对象基础设施在C++03中使用它们来代替C++11中的初始化列表。
你不应该害怕Boost库,至少不是那些仅作为头文件的库。那些有单独库部分的库可能设置起来稍微麻烦一些(构建情况最近得到了改善)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接