gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:09 25 4
gpt4 key购买 nike

目前的规范是:

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

要求是它可以长期维护。

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com