読者です 読者をやめる 読者になる 読者になる

std::stringで…

char*で初期化するときにNULLが入ったらどうなるんだっけ。まいっか。

473 :デフォルトの名無しさん:2008/05/08(木) 12:48:04
std::string とかでぬるぽ使えないのはなんで?

474 :デフォルトの名無しさん:2008/05/08(木) 12:49:07
>>473
どういう動作をさせるためにどうやって使いたいのかわからない。

475 :デフォルトの名無しさん:2008/05/08(木) 14:19:39
>>474
const char * にNULLを渡すか空文字を渡すかで動作が違う関数があると、
それをstd::stringでラップするときに微妙に困るじゃない。

476 :デフォルトの名無しさん:2008/05/08(木) 14:36:20
boost::optionalの出番か?

477 :デフォルトの名無しさん:2008/05/08(木) 15:07:11
>>475
class my_string : public std::string {
bool m_is_null;
public:
my_string() : m_is_null(true) {}
operator=(const char* p) { if (p==NULL) set_null() else set_string(p); }
operator=(const std::string& s) { set_string(s); }
void set_null() { m_is_null = true; clear(); }
void set_string(const std::string& s) { m_is_null = false; *this = s; }
bool is_null() { return m_is_null; }
}

478 :デフォルトの名無しさん:2008/05/08(木) 19:30:54
>>477
実は同じのを作って使ってるんだ。でもありがとう。

479 :デフォルトの名無しさん:2008/05/08(木) 19:58:46
Concrete Containerをplubic継承www

480 :デフォルトの名無しさん:2008/05/08(木) 20:02:34
と笑う人もいるので、抽象化して
template <class T> Nullable : public T
{
 ...
};
などしておいてはどうだろうか

481 :デフォルトの名無しさん:2008/05/08(木) 20:14:25
仮想デストラクタのないクラスはpublic継承しちゃだめだろ常識的に考えて・・・

482 :デフォルトの名無しさん:2008/05/08(木) 20:16:28
delete されるような場面でアップキャストしなけりゃ良いんじゃね?

483 :デフォルトの名無しさん:2008/05/08(木) 20:16:43
すると笑う人は笑わないのか?

484 :デフォルトの名無しさん:2008/05/08(木) 20:26:28
結局boost::optional自作になるのか

485 :デフォルトの名無しさん:2008/05/08(木) 20:42:08
なんで継承したがるんだ

486 :デフォルトの名無しさん:2008/05/08(木) 21:01:00
楽にかつ安全に特徴を追加する方法って無いのかねぇ…

487 :デフォルトの名無しさん:2008/05/08(木) 21:33:02
普通にオーバーロードを活用すればいいんじゃね? >486

488 :デフォルトの名無しさん:2008/05/08(木) 22:14:23
std::string * でいいような…それかboost::optional<std::string>