gpt4 book ai didi

c++ - 我应该如何将包装 API 的对象传递给使用该 API 的类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:34 24 4
gpt4 key购买 nike

这是我今天早些时候提出的问题的修订/更好的书面版本——该问题现在已删除。

我有一个开始使用 Google Mock 的项目。我创建了一个类,该类调用 Windows API 中的函数。我还创建了一个包装器类,其中包含包装 Windows API 的虚拟函数,如 Google Mock CheatSheet 中所述。但是,我对如何将包装器传递到使用该对象的类感到困惑。显然那个对象需要是多态的,所以我不能按值传递它,迫使我传递一个指针。这本身不是问题,但我很困惑谁应该拥有指向包装 API 的类的指针。

那么...我应该如何将包装类传递到真实类中以方便模拟?

这是我的意思的一个例子:

struct A {
virtual void SomeMethod(int x, int y)
{
::SomeMethod(x, y);
};
};

class Client
{
A * method_;
public:
Client(A * method = new A) : method_(method) {};
void DoSomething()
{
method_->SomeMethod(42, 34);
}
};

struct Mock : public A
{
MOCK_METHOD2(SomeMethod, void(int, int));
};

TEST(MyTest, MyTestWithMock)
{
Mock * mock = new Mock();
EXPECT_CALL(*mock, SomeMethod(42, 34)).Times(1);
Client client(mock); //Should *client* be responsable for deleting mock?
client.DoSomething();
};

示例 2:

struct A {
virtual void SomeMethod(int x, int y)
{
::SomeMethod(x, y);
};
};

class Client
{
A * method_;
public:
Client(A * method) : method_(method) {};
static Client Create()
{
static A;
return Client(&A);
}
void DoSomething()
{
method_->SomeMethod(42, 34);
}
};

struct Mock : public A
{
MOCK_METHOD2(SomeMethod, void(int, int));
};

TEST(MyTest, MyTestWithMock)
{
Mock mock;
EXPECT_CALL(mock, SomeMethod(42, 34)).Times(1);
Client client(&mock);
client.DoSomething();
};

最佳答案

总是有使用shared_ptr 的选项;这肯定会解决所有权问题。

关于c++ - 我应该如何将包装 API 的对象传递给使用该 API 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com