首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何复制CString功能

如何复制CString功能
EN

Stack Overflow用户
提问于 2011-09-06 20:51:16
回答 6查看 1.1K关注 0票数 2

我有一个MFC源文件,需要在Qt下编译。此文件使用MFC/ATL CString。具体来说,它使用一个CString作为iostream::open()的参数。我编写了一个CString类,它继承自QString,这样我就可以使用QStrings的大部分功能。

我主要担心的是,在调用iostream::open()的地方,我无法让我的CString实现工作:

这里有一些我的班级声明:

代码语言:javascript
复制
    class CString : public QString {
    public:
        CString() : QString() {}
        CString(const QString& other) : QString(other) {}
        CString(const CString& other) : QString(other) {}
        CString(_In_opt_z_ const XCHAR* pszSrc) : QString( pszSrc ) { *this = pszSrc; }
        CString(const char* pszSrc) : QString( pszSrc ) {}
        ...
    }

下面是使用CString的一部分代码:

代码语言:javascript
复制
ofstream outfile;
CString Path("dump.txt");

outfile.open(Path);

错误是:

没有调用'std::basic_ofstream >::open(CString&)‘的匹配函数

在“正常”的情况下,我只会做这样的事情:

代码语言:javascript
复制
outfile.open(Path.toStdString().c_str());

然而,这不是一种选择。未授权对原始代码进行任何修改。:(

有办法做到这一点吗?还是我必须使用微软在cstringt.h t.h中使用的同样更复杂、更冗长的代码来重新构建类呢?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-06 20:58:59

为您的CString类定义一个类型广播操作符如下:

代码语言:javascript
复制
operator const char*() { return this->toStdString().c_str(); }
票数 1
EN

Stack Overflow用户

发布于 2011-09-06 20:55:43

根据的说法,CString有一个重载的operator LPCTSTR,这就是在没有任何显式转换的情况下的工作方式。

我的猜测是,如果你想模仿这种行为,你需要提供类似的过载。LPCTSTR有点迟钝,所以operator const char *可能更好。

票数 5
EN

Stack Overflow用户

发布于 2011-09-06 21:02:40

首先,CString的正确设计是包装QString,而不是从它继承。毕竟,您只是在重新连接方法调用。

代码语言:javascript
复制
class CString {
public:
    /* ... */
private:
    QString internal;
};

编译器抱怨没有为接受ofstream::open()参数而定义的CString方法。这意味着CString不是直接获取的(毕竟,ofstream是一个标准类)。您可以在类中编写强制转换,以便在需要时将其转换为char *。

代码语言:javascript
复制
class CString {
public:
    /*...*/
    operator const char *()
    {
         return internal.c_str();
    }
private:
    QString internal;
};

这可能会解决问题。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7325993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档