为什么实例化没有成员的类?

时间:2015-03-12 22:51:08

标签: c++ oop

我目前正在处理一些遗留代码,并且遇到了一个没有成员只有一种方法的类。

class CommandClass
{
public:
  ModelData execute(std::string filter);
};

使用' new'创建类的实例。只是为了调用它的功能。是否有充分的理由这样做或者我应该将类更改为命名空间?

编辑:所以根据评论,我回去查看代码。我确实忘了公开:在课堂上但是在功能之前没有虚拟,所以我不认为它可以用作界面。

2 个答案:

答案 0 :(得分:2)

考虑以下模板:

template<class T>
ModelData foo(T command) {
    auto str = "foo"s;
    return T.execute(str);
}

您可以将具有成员函数ModelData execute(std::string)的任何类型的实例传递给该函数。这种类型可能有也可能没有状态(成员变量)。

CommandClass可能已被设计为类似模板的参数。实例化*类是调用模板化函数所必需的,即使execute没有可以使用的状态。

这只是一种可能性。如果没有文档,您将不得不询问编写代码的人。

*如果没有更多详细信息,我不会看到的理由来实例化new

答案 1 :(得分:1)

您应该为您的问题提供更多背景信息。

实际上,有很多理由没有成员自己上课。它们主要用于模拟行为方面。

我怀疑CommandClass旨在用于模板模型上下文,这需要模板参数类型来实现èxecute()方法。