c++ - 哪种 C++ 设计方法更易于维护?

标签 c++ oop design-patterns

目前的规范是:

给定宽字符数组或窄字符数组形式的字符串数据,为提供数据统计信息和修改数据的类编写功能。

要求是它可以长期维护。

所以我的第一个方法是要求先将原始字符数组编码为字符串,然后只提供一个模板类:

template<class T>
class MyString
{
private:
    T _data;
public:
    MyString(T& input) { _data = input; }; 
    size_t doSomeWork() { //assume T is of type basic_string<...> and use iterators };

};


//Use
const char* data = "zyx";
string blahblah(data);
MyString<string> abc(blahblah);
abc.doSomeWork();

或静态成员函数:

class StringTools
{
public:
    static size_t doWork(const char*) {}
    static size_t doWork(const wchar_t*) {}
};

//used like so:
const char* data = "hallo kitty";
cout << StringTools::doWork(data);

或者使用策略模式:

class MyString
{
protected:
    MyStringBase();
public:
    virtual ~MyStringBase();    
    virtual size_t doWork() = 0;
};

class MyStringCharArray : public MyString
{
protected:
    char* _data;
public:
    MyStringCharArray(const char* input) : MyString() { }
    virtual size_t doWork() {...};
};

//so it would be used like so
const char* blah = "blah";
MyString* str = new MyStringCharArray(blah);
cout << str->doWork();
delete str;

然后在未来,如果出于某种上帝遗弃的原因我切换到 BStr,那么除了要编写一个新的派生类之外,只需要更改前两行代码。

我认为,如果我像 1 和 3 那样编写一个包装类,它会变得更加繁重,并且任何封装都会被破坏,因为我必须允许访问底层。

但是如果我创建一个只有静态函数的类,那么它所做的就是模仿一个命名空间,这个命名空间最好由一些封装在 “字符串工具”命名空间。但是然后我仍然会在整个应用程序中传播原始字符数组的困惑,并且必须执行额外的验证等和规范 明确要求上课。

那么最干净、最可维护的方法是什么?

研究成果

最佳答案

最好的方法是做一些类似于 STL 算法的事情。

有一个只接受字符串 char/wchart_t 开始和结束迭代器的过程算法。通过这种方式,您的算法将无缝地处理所有在内存中连续的字符串。

关于c++ - 哪种 C++ 设计方法更易于维护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850937/

相关文章:

c++ - 访问 ctor 中的私有(private)类内存

JavaScript OOP、继承和性能

在构造函数中创建 JavaScript 原型(prototype)

java - Methods.class 中的代码重用 vs 策略模式和依赖注入(inject)

c++ - 多线程 - const char 数组作为参数传递

c++ - 为什么 double 可以存储比 unsigned long long 更大的数字?

c# - child 对象与 parent 的沟通模式

java - 解决java中的循环依赖

c++ - 避免堆栈溢出C++

c++ - 访问包含列表的对象列表的内容