【问题标题】:String class in stl c++ projectstl c++项目中的字符串类
【发布时间】: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;,那么这种样式也将解决一些问题,您可以在引用部分后续命名空间时获得。

标签: c++ string stl


【解决方案1】:

您在 C++ 中使用命名空间,而不是只有静态成员的类。

#include <string>

namespace String {
    std::string Replace(const std::string& str, const std::string& oldValue, const std::string& newValue);
};

【讨论】:

    【解决方案2】:

    您需要从类声明中删除静态,然后您发布的代码就可以正常工作了。

    【讨论】:

    • 第一眼没发现。这可能是正确的答案。
    • 抱歉我打错了,原文件中没有静态文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2011-02-06
    • 1970-01-01
    • 2021-03-25
    • 2011-02-24
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多