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

C++ 为什么实例化没有成员的类?,c++,oop,C++,Oop,我目前正在处理一些遗留代码,遇到了一个没有成员的类,只有一个方法 class CommandClass { public: ModelData execute(std::string filter); }; 使用“new”创建该类的实例只是为了调用其函数。是否有充分的理由这样做,或者我应该将类更改为名称空间 编辑:所以根据这些评论,我回去查看了代码。我确实忘了在类中添加public:但函数前没有虚拟,因此我认为它不能用作接口。您应该为您的问题提供更多上下文 事实上,有很多理由让班级没有成员

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

class CommandClass
{
public:
  ModelData execute(std::string filter);
};
使用“new”创建该类的实例只是为了调用其函数。是否有充分的理由这样做,或者我应该将类更改为名称空间


编辑:所以根据这些评论,我回去查看了代码。我确实忘了在类中添加public:但函数前没有虚拟,因此我认为它不能用作接口。

您应该为您的问题提供更多上下文

事实上,有很多理由让班级没有成员。它们主要用于建模行为方面


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

考虑以下模板:

template<class T>
ModelData foo(T command) {
    auto str = "foo"s;
    return T.execute(str);
}
模板
modeldatafoo(T命令){
auto str=“foo”s;
返回T.execute(str);
}
您可以将具有成员函数
modeldataexecute(std::string)
的任何类型的实例传递给该函数。这种类型可能有也可能没有状态(成员变量)

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

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


*如果没有更多的细节,我看不出一个好的理由来实例化
new
,但是。

从外观上看,我猜
execute
被声明为
virtual
可能使它成为一个伪接口。可能是一个抽象基类。它实际上是
virtualmodeldataexecute(std::stringfilter)=0。否则它只是一个有一个私有方法的类。给定这个类定义,你不能用new创建它,然后调用它的函数,因为它是私有的。因此,您需要提供更具代表性的代码。为什么要使用
new
创建实例?我怀疑它不是必需的。如果这是真正的代码,您应该扫描
friend
声明,这些声明可能会解释设计。