我目前正在处理一些遗留代码,并且遇到了一个没有成员只有一种方法的类。
class CommandClass
{
public:
ModelData execute(std::string filter);
};
使用' new'创建类的实例。只是为了调用它的功能。是否有充分的理由这样做或者我应该将类更改为命名空间?
编辑:所以根据评论,我回去查看代码。我确实忘了公开:在课堂上但是在功能之前没有虚拟,所以我不认为它可以用作界面。答案 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()
方法。