我想扩展std :: string,但不是因为你可能会想到的原因

Ale*_*lex 3 c++ typedef explicit

我有一个有效地采用字符串的方法.但是,我想要使用的字符串子集非常有限.我想把typedef'ing std :: string作为一些类,并将函数调用为显式.但是,我不确定这是否会奏效.想法?

jal*_*alf 8

通常的规则仍然适用:该类不是为了继承而设计的,并且它的析构函数不是虚拟的,所以如果你向上转换为std :: string基类,并让对象被销毁,你的派生类'析构函数不会被调用.

如果您能保证永远不会发生这种情况,请继续.

否则,您可以创建std::string类的成员,而不是基类.或者你可以使用私有继承.这种方法的问题在于您必须重新实现该类的字符串接口才能用作字符串.

或者你可以定义你的类来公开一个getString()返回内部std::string对象的函数.然后你仍然可以传递你自己的类,如果你尝试传递一个std::string,编译器会抱怨,但是当你需要时可以访问内部字符串.这可能是最好的妥协.


R S*_*hko 7

听起来你想限制输入(也许是一个只允许字母的字符串).

我建议在一个类中使用一个字符串,然后包装你想要的函数.

class limited_string
{
    std::string str;

public:
    limited_string(const char *data)
        : str(data)
    {
        if (!valid(str))
            throw std::runtime_exception(); 
    }

    virtual ~limited_string() {}

    limited_string &operator+=(const char *data)
    {
        // do all your work on the side - this way you don't have to rollback
        // if the newly created string is invalid
        std::string newstr(str);
        newstr += data;
        if (!valid(newstr))
            throw std::runtime_exception();

        str = newstr;
    }

    virtual bool valid(const std::string str) = 0;
}
Run Code Online (Sandbox Code Playgroud)