operator char*()

[戻る]
alexios [E-Mail] [HomePage] 2002/03/18(月) 23:11:39
セットアップ用にMFCを使いたくないプログラムがあって、その際にあたかもchar *型であるか
のようにこのクラスを使いたいと思い

class CxString  
{
public:
    void Message();
    operator char*();
    void operator =(const char *s);
    void operator =(const CxString &cs);
    void operator +=(const char *s);
    CxString operator +(const char *s);
    CxString(const char *s);
    CxString(const CxString &cs);
    CxString();
    virtual ~CxString();

protected:
    char *m_buffer;
};
・
・
・
CxString::operator char*()
{
    return m_buffer;
}
というような演算子のオーバーロードをしました。
すると、VC++はクラスをちゃんと解析してくれなくてoperator char *()は実装されていない
というようなエラーが出ますが、ビルドをするとちゃんとできて、例えば
CxString cs("hello");
MessageBox(NULL,cs,NULL,0);
というようなことができました。
ま、できればそれでOKという考えも成り立ちますが、なにぶん素人なもので、こんなやり方は一
般的にされているものでしょうか。

YuO [E-Mail] 2002/03/18(月) 23:52:54
でたエラーの内容はどのようなものでしたか?

もっとも,文字列なら,std::stringとか,
std::vector<char>を使えばいい気がしますけどね……。
#charの配列が必要なときのみstd::vector<char>を使って,std::string::assign。

alexios [E-Mail] [HomePage] 2002/03/19(火) 06:52:26
エラーというか、左側のClass Viewをクリックしたときに「この関数のインプリメンテーショ
ンがみつかりません」と表示されます。

しかし、STLでこんな膨大なヘルプがあるんですね。

2002/03/19(火) 11:31:58
よくあることです、
気にしちゃいけません。

// .netはSTLとか演算子オーバーロードとかちゃんと対応してくれるのかなぁ。

alexios [E-Mail] [HomePage] 2002/03/20(水) 06:21:49
>よくあることです、
>気にしちゃいけません。

あ、そうですか。

例えば_variantとか_bstrとかでクラスの前に
(long *)とか(LPCTSTR)とつければいいというのは、ざっと、こういう実装がされていると考
えて問題ないですね。

>// .netはSTLとか演算子オーバーロードとかちゃんと対応してくれるのかなぁ。
これも本当は気になるところで、MFCはなくなるんでしょうか。

古いスレッドには追加発言できません。