我怎样才能说服 emacs C++模式而不是我的小于不是模板参数?
How can I convince emacs C++ mode than my less than isn't a template parameter?
这个问题已经困扰我很多年了,我想知道是否有人有解决方案。问题是,在c++模式下,emacs似乎无法确定<
操作符是"小于"还是"开始模板参数",这将使自动缩进功能混乱。考虑如下内容:
bool foo() {
return X < Y &&
Y < Z;
}
Y在右边,如果我在Y < Z
的行上运行c-set-offset
(和C-c C-o
),它告诉我当前的行偏移量是template-args-cont
。最糟糕的是,任何低于此值的代码,包括其他函数,都将完全搞砸选项卡。通常我只是小心翼翼地手动将下一个函数的开头隔开。
编辑:为了确认,以下代码正确缩进:
bool foo() {
return X == Y &&
Y == Z;
}
编辑2:我有一些自定义样式和偏移量的东西,但即使启动emacs与-q忽略我的。emacs文件显示同样的问题。我目前使用的版本:
GNU Emacs 24.1.1 (x86_64-apple-darwin, NS apple-appkit-1038.36)
of 2012-06-10 on bob.porkrind.org
在mac OS X 10.8上,但我肯定我在ubuntu上看到过同样的问题,但我必须仔细检查版本。
有人找到解决办法了吗?Corey发现添加父级(X < Y)
是一种变通方法。
这看起来更像是c++问题,而不是cc-mode
。后者可能会使用一些更聪明的启发式方法来处理更简单的问题,比如您的问题,但通常在不知道X
是否是模板的情况下,这种小于/template-open的冲突很难解决。
考虑以下代码:
#include <iostream>
using std::cout;
#ifdef TEMPLATE
template <int I>
int X(int arg)
{
return I + arg;
}
#else
int X = -1;
#endif
int main(int argc, char** argv)
{
const int Y = 0;
int foo = 1, bar = 2;
cout << (X < Y && 10 > (foo + bar)) << 'n';
return 0;
}
如果#define TEMPLATE
在源代码中,则输出3
,否则输出1
,如果您在&&
-op中中断cout << ...
行,则没有办法找出正确的缩进,除非您知道该文件的确切构建环境。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- 我怎样才能说服 emacs C++模式而不是我的小于不是模板参数?
- 我的代码出了什么问题!我想打印值小于4000000的斐波那契数列