【发布时间】:2012-11-16 17:48:08
【问题描述】:
在c++ stl项目中可以用String.cpp和String.h创建String类吗?
String.h
#include <string>
class String {
public:
static std::string Replace(const std::string& str, const std::string& oldValue, const std::string& newValue);
};
除非将类重命名为 Stringy 之类的其他名称,否则会出现编译错误
【问题讨论】:
-
具体是什么编译错误?
-
static class …没有做你认为的事情(但这与你的问题无关)。除此之外,在 C++ 中拥有这样一个带有静态方法的类是不好的风格。 -
@KonradRudolph 我还发现这对这种特殊情况很有用:添加分组在一个类中的方法(仅包含静态方法)以增强字符串操作。我和我的同事不想为此引入额外的命名空间(我们已将此类类放在 Common::Utilities 中)。此外,我们已将此类类的默认构造函数和析构函数声明为私有,以便更清楚地说明它们是“静态的”。
-
@g-makulik 但是像这样的类确实引入了一个新的命名空间——尽管有一些不同的语义。真正的解决方案是在这里使用一个普通的命名空间,而不是一个类。你为什么不愿意在这里使用命名空间呢?
-
@KonradRudolph 可能是,因为我用 C# 编程了一段时间并且喜欢静态类的概念。如果客户端可以在他们的实现文件中使用
using namespace Common::Utilities;,那么这种样式也将解决一些问题,您可以在引用部分后续命名空间时获得。