小编Mic*_*fik的帖子

在vim中突出显示无与伦比的括号

在vim中编写python代码时,我被无法比拟的括号反复烧毁.我喜欢它们是如何处理C代码的 - 在无与伦比的paren之后的所有花括号中的红色vim亮点.我c.vim简要地查看了语法文件以尝试理解它,但处理括号错误的部分非常复杂.任何人都可以解释该代码如何工作,并建议我如何为python代码编写类似的东西?

具有不匹配的parens的示例C代码:

int main(void
{  /* brace highlighted in red */
}  /* brace highlighted in red */
Run Code Online (Sandbox Code Playgroud)

由于python代码没有花括号来突出显示,我们必须选择其他东西(也许是其他括号).

顺便说一句,我尝试了这个vim插件,但我对这种行为不满意.

编辑:

我正在使用python生成C++代码(一种喜欢括号和分号的语言).我有一个令人讨厌的习惯,就是让方向file.write()调用离开尾随的paren .如果我能让vim更明显地犯这个错误,那就太好了.

更新:

好的,这是我到目前为止所尝试的内容.

:syn region pParen transparent start="(" end=")" contains=ALL
:syn match pError display ")"
:hi def link pError Error
Run Code Online (Sandbox Code Playgroud)

不幸的是,所有这一切都是突出显示所有平衡括号的正确错误,与我想做的相反.我真的不明白我在这里做什么(只是复制了现有的C语法文件).如果有人能解释我的所作所为(错误),我将不胜感激.

python vim syntax-highlighting

12
推荐指数
2
解决办法
1万
查看次数

对容器中所有元素的成员函数的结果求和的最佳方法是什么?

假设我有以下对象:

struct Foo
{
    int size() { return 2; }
};
Run Code Online (Sandbox Code Playgroud)

什么是获得size所有对象总数的最佳方式(最可维护,可读等)vector<Foo>?我会发布我的解决方案,但我对更好的想法感兴趣.

更新:

到目前为止,我们有:

  • std :: accumulate和一个仿函数
  • std :: accumulate和一个lambda表达式
  • 普通的'for-loop

还有其他可行的解决方案吗?你可以使用boost::bind或制作可维护的东西std::bind1st/2nd吗?

c++ containers stl member-functions

11
推荐指数
4
解决办法
4776
查看次数

如何安全地在unsigned int和int之间进行static_cast?

我有一个8个字符string代表一个十六进制数字,我需要将其转换为int.这种转换必须保留字符串"80000000"和更高的位模式,即这些数字应该是负数.不幸的是,天真的解决方案:

int hex_str_to_int(const string hexStr)
{    
    stringstream strm;
    strm << hex << hexStr;
    unsigned int val = 0;
    strm >> val;
    return static_cast<int>(val);
}
Run Code Online (Sandbox Code Playgroud)

如果val > MAX_INT(返回值为0),则对我的编译器不起作用.更改val的类型int也会导致较大的数字为0.我在SO上尝试了几种不同的解决方案,但尚未成功.

这就是我所知道的:

  • 我在OpenVMS上使用HP的C++编译器(我相信,使用安腾处理器).
  • sizeof(int) 我的代码将在每个架构上运行至少4个.
  • 从数字> INT_MAX到int的转换是实现定义的.在我的机器,它通常会导致0但有趣的是铸造longint的结果INT_MAX,当值过大.

这是非常难以正确地做到,或者至少它已经适合我.有谁知道这个便携式解决方案?

更新:

更改static_castreinterpret_cast导致编译器错误.评论促使我尝试C风格的演员:return (int)val在上面的代码中,它工作. 在这台机器上. 在其他架构上,这仍然是安全的吗?

c++ casting integer-overflow openvms

11
推荐指数
3
解决办法
2万
查看次数

是否有一个标准的C++函数对象来拆分std :: pair?

有没有人知道是否有一个事实上的标准(即TR1或Boost)C++函数对象来访问std :: pair的元素?在过去24小时内,我曾两次希望我有类似keysPerl哈希函数的功能.例如,在std :: map对象上运行std :: transform并将所有键(或值)转储到另一个容器会很不错.我当然可以编写这样一个函数对象,但我更愿意重用那些有很多眼球的东西.

c++ boost tr1 std std-pair

10
推荐指数
1
解决办法
2806
查看次数

在Python中跟踪类实例变量的好方法是什么?

我是一名刚开始学习Python的C++程序员.我想知道如何在大型Python类中跟踪实例变量.我习惯有一个.h文件给我一个整齐的列表(包括评论)所有班级的成员.但是,由于Python允许您动态添加新的实例变量,您如何跟踪它们?

我正在想象一个场景,当我已经有一个新的实例变量时,我错误地添加了一个新的实例变量 - 但它离我工作的地方有1000行.是否有避免这种情况的标准做法?

编辑:看起来我对术语"成员变量"产生了一些困惑.我的意思是实例变量,我已经相应地编辑了我的问题.

python variables

9
推荐指数
3
解决办法
2429
查看次数

为什么iostream对象不会超载operator bool?

这个答案中,我谈到使用std::ifstream对象的转换bool来测试流是否仍处于良好状态.我查看了Josuttis的书以获取更多信息(如果你感兴趣,请查看600页),事实证明这些iostream物体实际上已超载operator void*.当流不好(可以隐式转换为false)时返回空指针,否则返回非空指针(隐式转换为true).他们为什么不过载operator bool

c++ iostream operator-overloading

9
推荐指数
2
解决办法
3674
查看次数

我可以编写一个接受原始指针和智能指针的C++仿函数吗?

鉴于以下内容:

struct Foo
{
    int bar() const;
};

struct IsEqual : public std::unary_function<Foo*, bool>
{
    int val;
    IsEqual(int v) : val(v) {}

    bool operator()(const Foo* elem) const
    {
        return elem->bar() == val;
    }
};
Run Code Online (Sandbox Code Playgroud)

我有一个容器,Foo*我使用std::find_ifstd::not1查明容器中是否有任何元素bar()返回与给定值不同的元素.代码如下所示:

// Are all elements equal to '2'?
bool isAllEqual(const std::vector<Foo*> &vec)
{
    return find_if(vec.begin(), vec.end(), std::not1(IsEqual(2))) == vec.end();
}
Run Code Online (Sandbox Code Playgroud)

快进到未来我现在有一个不同的容器,这次包含std::tr1::shared_ptr<Foo>.我喜欢简单地在重载版本中重复使用我的仿函数isAllEqual().但我不能. Foo*并且shared_ptr<Foo>是不同的类型.我需要继承,unary_function所以我可以使用not1.如果我能避免两次写同一个仿函数,它会更优雅.

问题:

  • 有没有办法写,IsEqual所以它可以使用原始和智能指针?
  • 我用手铐自己了 …

c++ smart-pointers adapter functor

8
推荐指数
2
解决办法
666
查看次数

为模拟的std :: fstream类避免"优势继承"警告

我正在使用googlemockstd::fstream在我的单元测试中模拟出一个对象,如下所示:

TEST_F(SomeTest, SomethingIsDoneCorrectly)
{
    class MockFstream : public std::fstream {};
    MockFstream lMockFstream;
    // Expectations and assertions here
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我得到以下警告:

警告1警告C4250:'SomeTest_SomethingIsDoneCorrectly_Test :: TestBody :: MockFstream':通过优势继承'std :: basic_istream <_Elem,_Traits> :: std :: basic_istream <_Elem,_Traits> :: _ Add_vtordisp1'

警告2警告C4250:'SomeTest_SomethingIsDoneCorrectly_Test :: TestBody :: MockFstream':通过优势继承'std :: basic_ostream <_Elem,_Traits> :: std :: basic_ostream <_Elem,_Traits> :: _ Add_vtordisp2'

我更喜欢干净的构建输出,所以我想要抑制这些特定的警告,但我正在编写跨平台代码,所以我也更愿意避免使用特定于编译器的#pragmas.

我可以在googlemock对象中做些什么来隐藏这些警告吗?

c++ fstream mocking compiler-warnings visual-c++

8
推荐指数
1
解决办法
1539
查看次数

什么是C++中的预存储器读取?

我今天看到一篇文章讨论了Rust编程语言(由Mozilla开发)以及它打算如何替换C++.Rust引用的一个好处是缺乏预存储器读取.引用Mozilla CTO Brendan Eich ......

他说,"Rust没有内存读取",但有C++版本.这些问题"会导致很多浏览器漏洞",并且会被Rust解决.

有趣的是,谷歌目前只有4个点击"预记忆读取"这一短语,所有这些都是指文章本身.什么是C++中的预存储器读取,为什么它不好?

c++ memory

8
推荐指数
2
解决办法
397
查看次数

功能'stof'无法解决

我以前遇到过这个问题,但找到了解决办法,只是这次解决办法不是一种选择.

我正在尝试使用'stof'函数,但我收到的错误是:'stof'不是'std'的成员'函数'stof'无法解析

如果在此页面上显示,我正在使用它:http://www.cplusplus.com/reference/string/stof/

这是我的包括:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

那么,我做错了什么?如果一个解决方案不能被发现可能有人点我的另一种方式将字符串转换为浮动,并把它抛出一个异常,如果字符串是不兼容?

编辑:使用示例程序和错误进行更新.

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main()
{
   string testString = "";
   float testFloat = 0.0;
   testFloat = std::stof(testString);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

说明资源路径位置类型'stof'不是'std'main.cpp/Assignment/src第33行的成员C/C++问题

说明资源路径位置类型函数'stof'无法解析main.cpp/Assignment/src第33行语义错误

c++ mingw c++11

7
推荐指数
2
解决办法
2万
查看次数