小编Vio*_*ffe的帖子

为什么在C++中允许删除空指针

我记得在某个地方读过delete NULL要在C++中成为有效的操作是必要的,但是我不能记得为什么它应该如此.有人请提醒我吗?

c++ delete-operator

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

如何使用SFINAE创建相同方法的2种不同实现

我已经阅读了一些关于SFINAE的文章,但找不到我的案例的解决方案.这就是我想要做的事情:

#include <type_traits>

struct CByteArray {};
struct HLVariant {
    HLVariant() {}
    HLVariant(const HLVariant&) {}
    HLVariant(const CByteArray&) {}

    };

template <typename T>
struct Serializer
{
    static inline typename std::enable_if<std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
    {
        static_assert(std::is_pod<T>::value, "Not a POD type");
        return CByteArray();
    }

    static inline typename std::enable_if<!std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
    {
        return Serializer<HLVariant>::serialize(HLVariant(value));
    }
};

template <>
struct Serializer<HLVariant>
{
    static inline CByteArray serialize(const HLVariant& value)
    {
        return CByteArray();
    }
};

int main()
{
    int i = 0;
    Serializer<int>::serialize(i);
    Serializer<CByteArray>::serialize(CByteArray());
    Serializer<HLVariant>::serialize(HLVariant()); …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++11

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

纯Python方式将统一差异应用于文件?

我有一个统一的差异文件(我们称之为补丁).我需要打开它,应用于指定的文件并将结果保存回文件.与Unix patch工具相同.我需要一个Python解决方案,我可以从我的.py脚本轻松调用,到目前为止我找不到任何.

我查看了https://code.google.com/p/google-diff-match-patch/wiki/API,看起来它无法满足我的需求.我还查看了https://github.com/techtonik/python-patchhttps://github.com/matiasb/python-unidiff.python-patch似乎模仿Unix patchutil,但它是一个命令行工具,我不明白如何从我的.py脚本调用它.

python diff patch

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

为什么不擦除支持反向迭代器?

我刚写了下面的代码,并且很惊讶它不编译:

std::deque<int> container;
// filling the container...
for (auto it = container.rbegin(); it != container.rend(); ++it)
    if (*it == 5)
    {
        container.erase(it);
        break;
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我想删除符合特定条件的最后一个元素(如果有).

错误是

调用std :: deque :: erase没有匹配函数(std :: reverse_iterator ...

起初我不相信它是由反向迭代器引起的,但事实确实如此,因为替换rbegin/ rend使用begin/ end解决它.

那么,2个问题:

  1. 为什么不支持这个?它只是C++委员会忘记包含在标准中的那些小事之一,还是缺少这种过载的理由?
  2. 做我想要的最优雅的方式是什么?我是否坚持按索引迭代?

c++ containers erase

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

快速解码JPEG图像的方法

我需要解码(解压缩到位图)相当小(约1200*1200)的JPEG.问题是我需要快速完成.我试过libjpeg,而且速度很慢.我也尝试过BitmapFactory.decodeByteArray - 它有点快,但仍然不够快.还有什么选择?原生(C++)库是更受欢迎的.

PS我的JPEG直接在内存中创建.

PPS我想知道libjpeg比BitmapFactory.decodeByteArray慢得多.

c++ android jpeg libjpeg android-ndk

7
推荐指数
1
解决办法
6833
查看次数

Qt 4:如何设置QWidget的外边框,使其内部小部件不受影响?

我有一个很奇怪的问题.我有一个QWidgetQHBoxLayout它.布局包含两个QLabels.我想为整个小部件设置边框.我正在使用样式表:

 "padding: 10px;"
 "border-style: solid;"
 "border-width: 3px;"
 "border-radius: 7px;"
Run Code Online (Sandbox Code Playgroud)

但问题是:这种风格适用于两个QLabel并完全打破布局.我只需要外窗口有边框,而不是标签.有任何想法吗?

提前致谢!

css qt stylesheet qtstylesheets

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

查找未排序和排序列表之间的最小距离

设A为列表,S为相同元素的排序列表.假设所有元素都不同.如何找到move X before Y (or end)将A变为S 的最小"移动"()?

例子:

A = [8,1,2,3]
S = [1,2,3,8]

A => S requires one move: 
   move 8 before end

A = [9,1,2,3,0]
S = [0,1,2,3,9]

A => S requires two moves:
   move 9 before 0
   move 0 before 1
Run Code Online (Sandbox Code Playgroud)

我更喜欢javascript或python,但任何语言都可以.

javascript python language-agnostic algorithm

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

为什么不可能获得指向基类的受保护方法的指针?

class A {
public:
   A() {auto tmp = &A::foo;}
protected:
   void foo() {}
};

class B : public A {
public:
   B() {auto tmp = &A::foo;}
};
Run Code Online (Sandbox Code Playgroud)

A编译没问题.类B产生编译错误:

'A :: foo':无法访问类'A'中声明的受保护成员

为什么这样,理由是什么?有没有办法绕过这个(如果我需要指针回调std::function等)?

c++ inheritance

7
推荐指数
1
解决办法
142
查看次数

为什么std :: count_if返回有符号值而不是unsigned?

刚刚意识到std::count_if 返回一个有符号的值.

为什么这样设计?在我看来,这两者都没有意义(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器进行比较size()而不会得到警告或使用显式类型转换.

我真的认为返回类型应该有size_type.

我错过了什么吗?

c++ stl standard-library stl-algorithm

7
推荐指数
1
解决办法
763
查看次数

在Android NDK上获取堆栈跟踪

首先:这个问题已经被问了几次,有些答案很有用,但没有一个提供有效的解决方案.我开始尝试这个答案的代码.令人惊讶的是,它做了它的事情,但是有一个很大的问题:调用这个代码的唯一方法我可以想到的是SIGSEGV处理程序,它有自己的堆栈 - 因此我无法得到我崩溃的应用程序的实际堆栈就像那样.

然后,我尝试合并这个答案.它稍微好一点 - 它产生堆栈的第一项(发生崩溃的方法).但那是 - 没有实际的回溯.因此,只要崩溃发生在第三方库(或标准库)中,此信息就毫无意义.

如何进一步改进代码并最终获得我糟糕的崩溃应用程序的堆栈跟踪?

PS在Android 4.0.3和Android 5.0上测试过,到目前为止行为是一样的.我想支持至少5.0和最近的早期版本,如4.3-4.4.

c++ linux android stack-trace android-ndk

7
推荐指数
1
解决办法
4573
查看次数