目前的规范是:
给定宽字符数组或窄字符数组形式的字符串数据,为提供数据统计信息和修改数据的类编写功能。
要求是它可以长期维护。
所以我的第一个方法是要求先将原始字符数组编码为字符串,然后只提供一个模板类:
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/