目前,我正在使用以下结构来开发我的大多数C++类,并且我想知道社区是否可以为我提供一些有关如何改进类设计以使其在将来更加可移植,友好和可维护的提示。
#include <vector>
#include <iostream>
namespace CompanyName
{
class Uri;
class Regex;
class String
{
public:
String();
String(const char*);
String(const String&);
virtual ~String();
void trim();
void erase();
void remove(const int);
void remove(const int, const size_t);
void uppercase();
void lowercase();
bool is_null() const;
bool is_empty() const;
size_t length() const;
void append(const String&);
bool compare(const String&) const;
bool compare(const String&, const bool) const;
void replace(const Regex&, const String&);
std::vector<String> split(const Regex&) const;
static const char* to_utf8(const String&);
static const uint16_t* to_utf16(const String&);
static const uint32_t* to_utf32(const String&);
static String from_utf8(const char*);
static String from_utf16(const uint16_t*);
static String from_utf32(const uint32_t*);
static String resource(const Uri&, const int);
static String resource(const Uri&, const String&);
String& operator=(String rhs);
String& operator+(const String& rhs);
String& operator+=(const String& rhs);
bool operator==(const String&) const;
bool operator!=(const String&) const;
bool operator<(const String&) const;
bool operator>(const String&) const;
friend std::ostream& operator<<(std::ostream&, const String&);
friend std::istream& operator>>(std::istream&, const String&);
static const String null;
static const String empty;
protected:
struct protected_pimpl;
protected_pimpl* _protected_pimpl;
private:
struct private_pimpl;
private_pimpl* _private_pimpl;
};
//we have to extract the content so as to not expose the UnicodeString.
inline std::ostream& operator<<(std::ostream& stream, const CompanyName::String& rhs)
{
const char* value = String::to_utf8(rhs);
stream << value;
delete value;
return stream;
}
inline std::istream& operator>>(std::istream& stream, const CompanyName::String& rhs)
{
const char* value = String::to_utf8(rhs);
stream >> value;
delete value;
return stream;
}
}
最佳答案
我要说的第一步,最好的步骤是删除不需要的所有内容。
考虑一下Monoliths Unstrung的建议:将类简化为主要概念后,它们将更易于维护且“面向 future ”。
例如:为什么replace()
需要成为成员函数?还是to/from_utfX()
函数?