トップページ⇒tech
323コメント91KB

C++で新しい文字列クラスをつくろう

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
CString , string , wstringに負けないものをみんなで作ろうね。
0002デフォルトの名無しさんNGNG
はいはい、2げっと

--------------------- 終了 --------------------------
0003デフォルトの名無しさんNGNG
>>1
CString , string , wstringでだめな理由をあげてください。
00041NGNG
なんでこの板の人間は非建設的で新しいスレが立つと何も考えずに叩こうとするんだろう。
興味なければ書き込まなければいいのに。
0005デフォルトの名無しさんNGNG
>>4
> なんでこの板の人間は

2chはそういうところ。挨拶みたいなものだ。
00066NGNG
何でこの板には>>4のような駄スレを立てる厨房がいるんだろう。
こんな下らないスレなんて立てなければいいのに。
0007デフォルトの名無しさんNGNG
>>1 それなんですか?
どのnamespace?
C++よくしらない香具師にもわかりやすく説明してくれ

>>4 説明が足りないから
0008デフォルトの名無しさんNGNG
typedef char * _2chstring;

クラスじゃないけどこれでいいよ。
領域確保は利用者が自分でやる。
0009デフォルトの名無しさんNGNG
>>8 アイタタタタ......
0010デフォルトの名無しさんNGNG
それよりコンテナ要件を(ほぼ)満たすvalarrayが欲しい
0011デフォルトの名無しさんNGNG
俺も >>3 と同じ疑問。
>>1
御託はいいから答えれ。
00121NGNG
>>11
むしろこちらが聞きたい。どうして満足できるのかと。
0013デフォルトの名無しさんNGNG
>>1
まず1が思う必要な機能を書いてくれ

アラシは時間の無駄だから、他のスレに行ってくれ。
それとも、そんなに暇でつか?
0014デフォルトの名無しさんNGNG
>>12
どこが満足できないのかを語れといってるのでは?

>>13
荒らしというのは10分でスレを潰すようなのをいう。
0015デフォルトの名無しさんNGNG
質問を質問で返すなボケ
0016デフォルトの名無しさんNGNG
string::c_str() が書き込み可能だったらいいなと思うことはあるな。
新しい文字列型を作るほどではないが。
0017デフォルトの名無しさんNGNG
とりあえず>1は反省しる!
そして、文字列クラスを継承して138ヶ国語に対応したトランスレータをつけれ!
00181NGNG
>>17
了解しました。
0019デフォルトの名無しさんNGNG
現在すでに存在するstringでの問題点を上げることで、
改良、新規開発を行う意義が出てくると思います。

目的なくしては、歯車の発明を繰り返すように不毛です。
具体的には、どの変が問題でしょう?
0020デフォルトの名無しさんNGNG
>>19
stringが言語仕様に組み込まれていないこと
標準ライブラリがstringを完全にサポートしていないこと(なのでc_strを多用しないといけない)。

ゆえに手遅れ。
0021デフォルトの名無しさんNGNG
>>16
それどういうこと?
0022デフォルトの名無しさんNGNG
>>20
言語使用に組み込まれている利点はなに?
あと、標準ライブラリってなんぞ?
0023デフォルトの名無しさんNGNG
C++ の文字列型の最大の問題点は、文字列型が多すぎることだと思うが。

char*, wchar_t* に始まって std::string, std::wstring, CString (MFC), WTL::CString,
_bstr_t, CComBstr, etc..

これ以上、増やさんでくれ…
0024デフォルトの名無しさんNGNG
みんな。wstring使ってる?
0025デフォルトの名無しさんNGNG
実行効率のために目的の分だけ用意しようって感じだからねえ。
0026デフォルトの名無しさんNGNG
>>24
使ってみた。
0027デフォルトの名無しさんNGNG
俺のUNKOString最強
変なスプリッタとか置換とか不気味な暗号化とか不気味な機能搭載しまくりで最高
0028デフォルトの名無しさんNGNG
おれぁ、日本人なら、stringなんか使わず、全部wstringにすりゃいいのにって
思うんだけど、誰も賛成してくんねーのよ。
結果として、wstringは使えない。

なんか変じゃないのか、日本。
0029デフォルトの名無しさんNGNG
>言語使用に組み込まれている利点はなに?
文字列クラスを乱造するアフォがいなくなること

>あと、標準ライブラリってなんぞ?
std
0030デフォルトの名無しさんNGNG
>>29
c++でのstdはSTLだと思うのだが、これいかに。
っていうかstdってなんだ?unistdとかのことかな。

もしかして、c++をbetter cとして使いたいだけ?


0031デフォルトの名無しさんNGNG
>>27
公開キボンヌ
0032デフォルトの名無しさんNGNG
>c++でのstdはSTLだと思うのだが、これいかに。
ハァ?
0033デフォルトの名無しさんNGNG
まぁ、文字列リテラルがstd::basic_stringだったら、と思うことはたまにあるが。
つーか、どうせならCharset変換用facetのフリー実装でも作ってくれ。
Dinkumwareのは有料のはずだし。
0034デフォルトの名無しさんNGNG
>>28
wstring, wchar_t は扱い微妙なんだよな。

std::exception::what() の戻り値も char* だけで wchar_t* ないしさ。
0035デフォルトの名無しさんNGNG
>>28
char*との相互変換が簡単だとよかったのにね。
003628NGNG
>>34 >>35
勉強になりました。
0037デフォルトの名無しさんNGNG
class strong {
unko buriburi;
}
0038デフォルトの名無しさんNGNG
inline std::string::operator const char * () const { return this->c_str(); }
キボンヌ
0039デフォルトの名無しさんNGNG
inline std::string::operator const char () const { return this->c_str()[ rand() % strlen( this->c_str()) ]; }
キボンヌ
0040デフォルトの名無しさんNGNG
char*廃止
キボンヌ
0041デフォルトの名無しさんNGNG
>>39
何がやりてーんだよ(w
0042デフォルトの名無しさんNGNG
>>40
Yahoo!メールで利用できるディスク容量は最大で6.0MBです。

お客様は既に7.0MBを使用しており、使用できるディスク容量をかなり
超過しています。そのため、一時的に新しいメールを受信できなくなっており
ます。新しいメールを受信する前に、既読の古いメールもしくは容量の大きな
メールをフォルダから削除してください。(削除したいメールのチェック
ボックスをオンにして「選択されたメールを削除」ボタンをクリックしてくだ
さい。)
0043デフォルトの名無しさんNGNG
どうせなら2CHTL作ろうよ
0044デフォルトの名無しさんNGNG
>>43
C 「炭素 (Carbon)」 (6) 原子量 12.0111
 単体には、黒くてもろい黒鉛と、透明で硬いダイヤモンドがある。このうちダイヤモンドは
 電気を通さないが、黒鉛はゆるい層状構造の間を電子が移動できるので、金属などと同じく
 電導性を持つ。

H 「水素 (Hydrogen)」 (1) 原子量 1.007947
 もっとも軽い元素。常温で2分子の気体になる。反応性に富み、酸素と一緒に火を付けると、
 高熱を出して燃える。同位体には、普通の軽水素(元素記号H)、重水素(元素記号D)、
 3重水素(元素記号T)がある。3重水素は同位体として不安定で、時間がたつとヘリウム
 の同位体に変化する。
 映画「宇宙戦艦ヤマト・完結編」において、3重水素が常温で液体であるかのように描かれ
 ていたが、これは何かの間違いであろう。波動砲の一撃で大爆発を起こしたが、もちろん
 真空中ではこのようなことは起きないはずである。

H 「タリウム (Thallium)」 (81) 原子量 204.38332
 ガリウムやインジウムと同じく存在量は非常に少ない。黄鉄鉱などの硫化鉱物を焼いた際の煙
 から取れる程度である。この族の他の金属と異なり、塩酸や硫酸にゆっくりとしか溶けない。

で、何するの?
0045デフォルトの名無しさんNGNG
> H 「タリウム (Thallium)」

Tl 「タリウム (Thallium)」
0046デフォルトの名無しさんNGNG
char *だけで十分でしょ(笑)
0047デフォルトの名無しさんNGNG
>>46
と言う奴に限って文字列リテラルでバグる罠。
0048デフォルトの名無しさんNGNG
ほれ。
class _2chstring{
public:
  char str[65535];
};
0049デフォルトの名無しさんNGNG
前にあるアンダーバーはなんだ?
0050デフォルトの名無しさんNGNG
>>49
先頭が 2 じゃエラーになるだろ。
005149NGNG
くっ。
0052デフォルトの名無しさんNGNG
>>49
標準規格に入れるという野望があるんだろ。
0053デフォルトの名無しさんNGNG
で、結局皆は文字列何使ってんの?
0054デフォルトの名無しさんNGNG
俺はこんなふうにしてる
#ifdef _UNICODE
typedef std::wstring TString;
#else
typedef std::string TString;
#endif
0055デフォルトの名無しさんNGNG
そんなことせんでも
typedef
std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> >
tstring;
としとけば良いじゃん。
0056デフォルトの名無しさんNGNG

MFCってCString とか CWnd とか、良い名前全部取っちゃっ
てるからずるいよな。名前が重ならないようにしないと・・。

デフォルトの名前空間で優先順位がつけられたらいいのに。


0057デフォルトの名無しさんNGNG
文字列クラスなんか要らん。遅くなるだけだ
0058デフォルトの名無しさんNGNG
遅いと感じるなら、標準アロケータから俺様アロケータに換えればいいのでは?
0059デフォルトの名無しさんNGNG
>>56
54氏がやってるように
某島流の「T何たら」にすればよかんべ
0060デフォルトの名無しさんNGNG
>>55 おお、そんな手がありましたか、勉強になりますた。
0061デフォルトの名無しさんNGNG
>>59
Tって何の略でつか?

0062デフォルトの名無しさんNGNG
>>59
>54氏がやってるように
>某島流の「T何たら」にすればよかんべ

54氏がやってるのは、
LPTSTRやTCHARのTを真似ているんだと思うんだけど、
某島流の「T何たら」のTも同じ意味から来てるの?

>>61
漏れも知りたい。想像でTranslateあたりと思ってるんだけど、
実際はなんなのか知らんし。
0063デフォルトの名無しさんNGNG
>>61-62

T は Type じゃないの? 知らんけど。
0064デフォルトの名無しさんNGNG
Delphiだろ
006559じゃないけどNGNG
>>64
Delphi は島だよヽ(`Д´)ノ ウワァァァン!!
0066デフォルトの名無しさんNGNG
T〜はテンプレート
0067デフォルトの名無しさんNGNG
Turboに決まってんだろがこのスットコドッコイ
0068デフォルトの名無しさんNGNG
#undef char
class char;

誰か適当に char 作って
0069デフォルトの名無しさんNGNG
charはマクロじゃないYO!
0070デフォルトの名無しさんNGNG
class Char{};
#define Char char

こうかな?
0071デフォルトの名無しさんNGNG
C++では#defineを使ってはならないと聞いたけど本当??
0072デフォルトの名無しさんNGNG
定数を作る場合と関数風マクロを作る場合は使うべきではない

ただ#defineじゃないと出来ないことがちょびっとあるので
使ってはならない訳でも無いのですか?
0073デフォルトの名無しさんNGNG
条件付きコンパイルやインクルードガードには必用だよな
0074デフォルトの名無しさんNGNG
ふむ、自分用の文字列関数既に作ってる。
あんまり調べずに作ったから、
C++にwstringというライブラリが存在していたのかー。と焦っちまった。


0075デフォルトの名無しさんNGNG
Stringクラスの実装て結構難しい門奈。
0076デフォルトの名無しさんNGNG
class String{
public:
 std::string data;
};


終了
0077デフォルトの名無しさんNGNG
そうでもない
面倒なだけ
0078デフォルトの名無しさんNGNG
class String : public std::string{};
こっちのほうがいいと思われます、終了
007976NGNG
>>78
くやしいけど俺の負けだ。
008076NGNG
いや。

typedef std::string String;

で、どうかな。終了
0081デフォルトの名無しさんNGNG
俺はこうしてる。

typedef std::wstring String;
0082デフォルトの名無しさんNGNG
C++で16bit文字は使いづらいよう。
文字列リテラルの前にLいるし、char *じゃナイトだめな関数が結構あるし。
0083デフォルトの名無しさんNGNG
そうなんだよな。俺なんかDirectMusic使っていきなり
WCHARでファイル名を格納せにゃならないと知った時
面倒だと思ったよ。そんでもってUNICODEじゃないという。
2度びっくり。
0084デフォルトの名無しさんNGNG
>>82
マルチバイト文字列の処理と比べれば楽だと思うけどな。
ただ変換すればいいだけなんだし。

Lは面倒だが癖になっちまったよ。
JavaでもついついLを付けちまう。
0085デフォルトの名無しさんNGNG
WinNT系のようにOS自体がUNICODE化されており、ほぼあらゆるAPIに
WCS版があるという幸せな環境なら楽だが、UNIX系のOSだと、システムコール
にしろライブラリを使うにしろ、ほぼ何をするにも変換が必要になると思われ。
C++ならまだどうとでもなるが、Cだと「ただ変換をするだけ」でも結構
面倒くさい。
どっちが楽かは、どの程度字句単位の処理をするかによるんじゃないのかな。

ワイド文字リテラルはまともにサポートしてないコンパイラがあるんで
困りもの。
エンコーディングもUCS2/UTF32に決まってる訳じゃないし。
0086デフォルトの名無しさんNGNG
>>77
実用上、参照カウントとかコピーオンライトとか実装しないと駄目だろ。
結構難しいんじゃないかと。
0087デフォルトの名無しさんNGNG
System::Stringを使えば解決
0088デフォルトの名無しさんNGNG
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
スターバックスコーヒー スターバックスコーヒー
0089デフォルトの名無しさんNGNG
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
死ぬ気でスターバックスコーヒー 死ぬ気でスターバックスコーヒー
0090デフォルトの名無しさんNGNG
やかまし
0091デフォルトの名無しさんNGNG
>>88-89
そんなお前は昔、俺と共にどっかの糞スレでスターバックスコーヒーを書いてた奴だな。
感動の再会。
0092デフォルトの名無しさんNGNG
dat落ちしてるけどここか。
http://pc2.2ch.net/test/read.cgi/tech/1017223873/
0093デフォルトの名無しさんNGNG
std::stringのfind系はマルチバイト文字に対応してないから使えないよな。
俺は派生クラスを作ってるから構わんけど。
0094デフォルトの名無しさんNGNG
STLのクラスを継承するなよ
0095デフォルトの名無しさんNGNG
>>94
じゃあどういう解決法がある?
0096デフォルトの名無しさんNGNG
自分で一から書けよ。
0097デフォルトの名無しさんNGNG
>>96
誰がそんなアホらしいことやるかよ
0098デフォルトの名無しさんNGNG
>>97
委譲汁
0099デフォルトの名無しさんNGNG
で、何でSTLクラスを継承したら逝けないの?
ATLではテンプレートクラスでも継承しまくりだけど。
0100デフォルトの名無しさんNGNG
仮想デストラクタを持っていないから。
0101デフォルトの名無しさんNGNG
>>100
仮想関数を使わなければいいんじゃないの?
■ このスレッドは過去ログ倉庫に格納されています