小编pet*_*555的帖子

我应该包括每个标题吗?

我是否应该包括每个标题,即使之前包括它?或者我可以尽可能地避免它?例如.如果我使用std::stringstd::vector在某些文件中.如果<string>包含<vector>我应该只包括<string><string><vector>

c++ c++11

17
推荐指数
2
解决办法
1629
查看次数

如何为网络客户端编写单元测试?

我需要编写简单的http客户端.为我的班级进行单元测试可能会很棒.但我不知道如何写出适当且可测试的课程.

例如,我有一个像这样的客户端:

class HTTPClient
{
public:
     HTTPCLient(const std::string& host, const std::string& port): session(host, port) {}

     void send()
     {
         session.sendRequest(someRequest);
         Response response = session.receiveResponse();
         // ...
     }

private:
    SomeLibrary::ClientSession session;
};
Run Code Online (Sandbox Code Playgroud)

如何测试send方法(我真的发送我想要的东西)?我无法嘲笑它.我可以 在构造函数中编写HTTPClient接收SomeLibrary::ClientSession对象(在测试中我会传递模拟)但它是好的设计吗?我认为会话等的实现方式应该隐藏在我的课堂中.

你有什么主意吗?

c++ unit-testing googletest gmock c++11

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

CppCheck.变量的范围可以减少(和循环)

CppCheck找到了一些调查结果:"变量'x'的范围可以减少".

如果我遇到这种情况怎么办:

int x;
for (int i = 0; i != 10; ++i)
{
    x = someFunction();

    // ... I use x variable here
}
Run Code Online (Sandbox Code Playgroud)

我认为我的代码没问题.你怎么看?它会变成这样的东西吗?

for (int i = 0; i != 10; ++i)
{
    int x = someFunction();

    // ... I use x variable here
}
Run Code Online (Sandbox Code Playgroud)

在第二个代码中,为所有迭代定义了变量x ...不是不好(不是最佳的),我猜...

c c++ performance coding-style cppcheck

6
推荐指数
3
解决办法
8699
查看次数

如何仅在黑色中找到轮廓?

我尝试从图像中去除噪音。我在图像中有一些黑色像素组。我使用 cv::findContours 和 cv::boundingRect。我用白色填充小矩形(小矩形是图像中的噪声)。但是这种方法也找到了我的白色轮廓(例如黑色圆圈的中间)。如何找到黑色像素的计数?有什么简单的解决办法吗?

c++ ocr opencv image-processing noise-reduction

5
推荐指数
1
解决办法
1856
查看次数

在所有std ::期货结束之前从函数返回是否安全?

我有这样的代码:

int function()
{
    std::vector<std::future<int>> futures;
    for (const auto& elem : elements)
    {
        futures.push_back(std::async(&MyClass::foo, myClass, elem);
    }
    for (auto& f : futures)
    {
        const int x = f.get();
        if (x != 0)
            return x;
    }
}
Run Code Online (Sandbox Code Playgroud)

当有未完成的异步调用时,我可以从函数返回吗?我只对一个非零值感兴趣.我应该等到所有异步调用完成吗?这段代码安全吗?

c++ asynchronous future c++11

5
推荐指数
1
解决办法
553
查看次数

std :: bind中的shared_from_this如何在对象不存在的情况下工作?

这段代码安全吗?

class C : public std::enable_shared_from_this<C> {
    void start() {
             boost::asio::async_write(socket_, boost::asio::buffer(message_), 
             std::bind(&tcp_connection::handle_write, shared_from_this(),
             _1, _2));
    };
    // ...
};

class D {
    void start()
    {
         std::shared_ptr<C> cptr = std::make_shared<C>(); // (1)
         cptr->start();
    } // (2)
};
Run Code Online (Sandbox Code Playgroud)

如果消息很长,则async_write操作可能需要很长时间.

在点(1)处只有一个shared_ptr指向C对象.start()被称为,start()完成和在(2)变量cptr超出范围并被销毁.

async_write完成写操作,回调被调用; 这会导致崩溃,因为shared_from_this()尝试创建shared_ptr一个不存在的对象.

这是对正确的描述吗?

c++ bind shared-ptr boost-asio c++11

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

如何将shared_ptr传递给生命周期较低的类?

我想优化我的代码.我有一个具有shared_ptr数据成员的类.在这个类的一些方法中,我创建了需要使用这个成员的对象(只是为了从shared_ptr指向的对象获取信息).我知道这些创建对象的生命周期低于我的主类.如何传递这个指针?我认为另一个shared_ptrs是不必要的(因为我保证对象将存在).那么应该得到我创建的类?他们应该得到原始指针吗?weak_ptr的?或者最好的解决方案是获取shared_ptr(并递增其引用计数器)?什么是最标准的解决方案?

c++ smart-pointers shared-ptr c++11

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

如何模拟方法返回istream&?

我已经模拟了虚方法返回istream&.我想在测试用例中使用它.如何返回一些价值?

问题istream是不可复制.

我尝试这样的事情:

TEST(x, y)
{
     MockClass mock;
     std::istringstream str("Some text");

     EXPECT_CALL(mock, m(_)).WillOnce(Return(str)); // m method returns std::istream&

     sut.callMethod();
}
Run Code Online (Sandbox Code Playgroud)

c++ istream gmock c++11

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

std :: map with cv :: Point作为键

我需要创造std::map<cv::Point, double>.cv::Point是一种来自OpenCV库的点.它有以下字段:xy.

cv::Point<当然没有操作员.您是否知道如何定义它以获得对元素的最佳访问std::map

换一种说法.我有例如20000点.我需要快速访问每一点.

例如:

std::map<cv::Point, double> myMap;

Point p(10, 234);
int value = 777;
myMap[p] = value; // I need this operation quite fast so I decided to use std::map
Run Code Online (Sandbox Code Playgroud)

但是cv :: Point没有<运算符.我可以准备<运算符(它只比较x坐标):

bool operator<(const cv::Point a, const cv::Point b)
{
    return a.x < a.x;
}
Run Code Online (Sandbox Code Playgroud)

但我想这不是好运营商.许多点具有相同的x值.

在这种情况下如何准备有效的操作员?

c++ algorithm opencv stl data-structures

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

如何避免在头文件中定义整个模板类

我有这样的课:

template <typename T>
class C
{
public:
    C(T t): t{t} {}
    void publicMethodA() { privateMethodA(); }
    void publicMethodB() {}
    void publicMethodC() {}
    // ...

private:
    void privateMethodA() { t.call(); /* only one place that uses t member */ }
    void privateMethodB() {}
    // ...

    T t;
};
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我只需要t在一个地方(in privateMethodA)中的模板字段,它强制我在头文件中定义每个方法(但它们不使用t成员).我怎么能避免这个?你有什么想法?

c++ oop templates c++11

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