小编Dre*_*ann的帖子

实现抽象工厂模式的最佳方法

考虑以下代码:

#include <stdio.h>


// =============================


class Shape{
public:
    virtual ~Shape(){};

    virtual void process() = 0;
};

class Triangle : public Shape{
public:
    virtual void process() override {
        printf("BBB\n");
    }
};


// =============================


/* option 1 */
class TriangleProducer{
public:
    Triangle factory(){
        return Triangle {};
    }
};



/* option 2 */
class PtrShapeProducer{
public:
    Shape *factory(){
        return new Triangle {};
    }
};



/* option 3 */
class PimplShape : public Shape{
    Shape *sh;
public:
    PimplShape(Shape *sh) : sh(sh){
    }

    virtual ~PimplShape() …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism c++11

3
推荐指数
1
解决办法
1292
查看次数

通过GTK获取dpi设置

使用GTK,如何查询当前屏幕的dpi设置?

gtk screen dpi

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

使用参数制作命令行程序

我发现可以通过 C++ 创建命令行程序。我是一个 C++ 菜鸟,我只知道基本的东西,但我仍然想用它来创建新的命令行程序。
现在,我发现了这段代码:

//file name: getkey.exe
#include <conio.h>
int main(){
    if (kbhit())  return getche() | ('a' - 'A');
}
Run Code Online (Sandbox Code Playgroud)

这出奇的简单,它的运行方式如下:getkey
但它没有解释如何创建带有参数的命令(例如: getkey /? 或 /K 或 /foo...)

如何创建带参数的命令行程序?<<主要问题

c++ command cmd creation

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

可以在C++ catch(...)块中访问抛出的异常

我将GDB附加到当前在catch(...)块内的进程.

是否有已知的技术来访问抛出的异常?

有问题的程序是gcc/x86-64二进制文件,但我也对其他版本感到好奇.

c++ gcc gdb exception-handling

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

打破嵌套循环

我在Matlab中有三个嵌套循环,在每个循环中,我有一个检查标志的"if".如果没有问题,则算法继续进行,否则,我希望程序终止.这是我的代码,我觉得有些不对劲!

[A] = finction (...,...,...)

for i = 1:100
for j = 1:100
for k = 1:30

some operation which its results is a flag

if flag==1 % its initial value is 0
break
end;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)

应该把那个中断放在哪里以便我打破其余的计算?

matlab

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

从函数返回进入无限循环Visual Studio 2012

我试图测试各种指针速度的速度,并遇到一个非常奇怪的问题.在分配原始指针时,它运行正常.(存在内存泄漏,但这不是问题.)当我使用shared_ptr运行第二次测试时,它运行填充精细,打印日志,然后当它返回时,它进入无限循环.看起来ref计数是垃圾,但我正在按价值做所有事情.

#include <memory>
#include <vector>
#include <functional>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>

#include <Windows.h>

using namespace std;

static const int TOTAL = 1000000;

int* newTest(int i)
{
  return new int(i);
}

shared_ptr<int> sharedTest(int i)
{
  return shared_ptr<int>(new int(i));
}

template <typename T>
pair<int, vector<typename T::result_type>> Fill(T fn)
{
  unsigned long start = GetTickCount();
  vector<typename T::result_type> vec;
  vec.reserve(TOTAL);
  for(int i = 0; i < TOTAL; i++)
  {
    vec.push_back(fn(i));
  }
  unsigned long end = GetTickCount();
  return make_pair(end - start, …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ c++11

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

UnspecifiedBoolType的类型?关于typedef,成员函数指针和转换运算符

我想了解下面的代码.实际的类型是UnspecifiedBoolType什么?

我糊涂了.有谁可以向我解释一下?提前致谢!

template <typename T>
class MyOptional
{
public:    
    MyOptional() : valueIsSet(false) {}
    MyOptional(const T& value) : valueIsSet(true), value(value) {}

    // Conversion to bool. This is a variant of the "safe bool idiom".
    typedef T MyOptional<T>::*UnspecifiedBoolType;
    inline operator UnspecifiedBoolType() const;

    ...

private:
    bool valueIsSet;
    T value;
};

...

template<typename T>
MyOptional<T>::operator MyOptional<T>::UnspecifiedBoolType() const
{
    return valueIsSet ? &MyOptional<T>::value : 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ typedef

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

内核 CUDA 中的 C++ 代码?

据我所知,CUDA 支持 C 和 C++。但是我不能在我的内核中使用 C++。

我尝试这样一个简单的例子

__global__ void simple(){
     cout<<"abc";
}
Run Code Online (Sandbox Code Playgroud)

那是错误。但如果我改变printf("abc");它是对的。

你能帮我解释一下吗?非常感谢!

c++ cuda

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

Cap'n Proto 是否支持分隔消息

Cap'n Proto支持分隔消息吗?

我的目标是将多条消息写入文件管道并在写入时实时读取。

所以...

  1. 消息需要以某种方式分隔。

  2. 并且解析器必须能够检测不完整的消息并等待。

c++ java protocol-buffers capnproto

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

Where is the fold expression ()?

Reference fluentCPP article

The below code explanation says that this structure inherits from several lambdas, can be constructed from those lambdas, and folds over the using expression.

template<typename... Lambdas>
struct overloaded : public Lambdas...
{
    explicit overloaded(Lambdas... lambdas) : Lambdas(lambdas)... {}

    using Lambdas::operator()...;
};
Run Code Online (Sandbox Code Playgroud)

My doubt is that parentheses i.e () indicate a c++17 fold expression but I don't see any enclosing parentheses around the using statement. How will it fold?

c++ fold-expression c++17

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