これライセンスはなんだ?
C.C. 0
#ifndef _fwstream_h_ 規格書10ぺん読み直してこい
_fwstream_h_ // '_'で始まる識別子 #include <malloc.h> // #include <cmalloc>ではない class stringadr : public std::string // std::stringの継承 // 0 ではなく NULL の使用 // DWORD その他WinAPI の使用 // 「fstreamをfwstreamで置き換えれば使える。」 "..." が L"..." ではないので使えない // Cスタイルキャストの使用 // std::size_t が size_t ではない // 識別子"motosize" (笑)
boostでもstdでもいいけどshared_ptrってweak使わなくてもメモリ確保しちゃうじゃん あれ循環しないってわかってる時には使わないようにしたいんだけどそういうオプション無いの?
細かいところだけどintとlongの使い分けがよくわからんな。ビット数保証したいなら __int32と__int64の方が気持ち良くない? | long a = (long) (iti - b * (1 << 31)); | int n = SetFilePointer ( fp, a, &b, FILE_BEGIN ); 何コレ。DWORDをintに突っ込むな。
規格屋はなぜthisを参照にしなかったのか。アホだったのか
thisがreferenceではなくpointerなのはD&Eに理由が書いてあったけど具体的な内容はわすれた
intとlongとDWORDはどれでもいいけど。警告・エラー出たら書き換えた。 ほぼすべての箇所で32bit符号なし整数よく64bitいるのはファイル位置とサイズの所。 std::stringの継承は良くないの? テストコードで動いたからアップしたけど。手直ししてみるよ。 ライセンスはCC0で。
>>959 日本語版の47ページに書いてあるじゃん
「thisを導入した時はまだ、リファレンスというものはなかった。」
おれっちメンバ呼ぶときは必ずthis->つけちゃう方なんやけど〜
thisは「* const」なの?
>>960 #include <iostream>
#include <string>
class A : public std::string {
public:
~A() { std::cout << "~A()" << std::endl; }
};
int main() {
std::string* p = new A;
delete p;
}
昔はthisを書き換えられた気がする 今はできないから*const
どっちもデストラクタ呼ばれるな #include <iostream> #include <string> using namespace std; class A : public std::string { public: ~A() { std::cout << "~A()" << std::endl; } }; class B { public: ~B() { std::cout << "~B()" << std::endl; } }; int main() { A* p = new A; delete p; B* q = new B; delete q; }
std::mapである条件を満たした値をまとめて消したいんだけど、 そんな関数,ファンクタ,定形句、そういったものって何か無いかな?
>>966 std::string* にして delete できない
std::for_each()にラムダ式を組み合わせるとか
typedef std::map<T> Map; Map m; for (Map::iterator it = m.begin(); it != m.end(); ) { if (...) { m.erase(it++); } else { ++it; } }
>>968 stringと関係無いだろ。
#include <iostream>
using namespace std;
class A {
public:
A() { std::cout << "A start" << std::endl; }
~A() { std::cout << "A end" << std::endl; } };
int main() {
void *p = new A; delete p; }
>>971 おいおい
仮想デストラクタって知ってるか?
>>960 こんなレベルじゃ怖すぎて使えないなwww
メモリバッファとアドレスのペアを内部で使うだけでnewとかdeleteしてない。 あと、他所でもメモリ管理は手間かかるからstringで代替えしてる。 用途的にはこれでも一緒だけど、アクセスが一段階増えてみた目良くない。 class string_adress { public: string buf; long long adress; }
newで生成してるわけではないから別に問題はないが 何故継承した
string_adress x; と宣言したとき x.buf[n]とx.adressより、 x[n]とx.adressの方が良いからだよ。
>>970 やはり自分でループ書いて一個一個やるしか無いのかな
Erase-Removeイディオム的なものがあったらいいなと思ってたんだが…
クラスとして動作するstringに変数を追加して その追加した変数を外部からしか操作しないってのは 俺には違和感大有り 見た目悪くても構造体にすべきだろう
別々の定義でもいいんだけど。用途的にはこれでもいいけど。 string buf; long long adress; 関数での受け渡しの時に一変数の方が見やすい。 見た目、書く量減らすには継承になった。駄目か?
なにが問題なのか分かってて、隠蔽もできてるんなら使っても良いよ
変数はDWORDとsize_tと__int64に統一するか。 あとfopenも追加しよう。 DWORD (unsigned long) はWINAPIの要請で使うしかないな。 HTTP(S)も同じ操作にしようと思っているところ。
>>979 コード公開したいなら他人が弄り易いコードにすれば?
仮想デストラクタとか多重継承とかを考えれば普通そこで継承はない。
コード見る限り、addressはinaddrとoutaddrみたいな単独の変数にしてもよかったんじゃないか? まあstringadrでもいいけどせめてprivateにしよう。 というかなぜprivateにしなかったし。 itiって最初何のことか分からんかった。
構造体でいいんじゃない
ここまでadressのスペルミスに言及なし。
set<int> age; age.insert( 0 ); set<int>::iterator itr = age.find(0); if( itr != age.end() ){ *itr = 1; // 38行目 } をコンパイルすると、 hoge.cpp:38: error: assignment of read-only location ‘itr.std::_Rb_tree_const_iterator<_Tp>::operator* [with _Tp = int]()’ というエラーが出てくるのですが、原因が分かりません。 どうしたら解決できるでしょうか?
templateの練習のために自作スマポ作ってみた物の やっぱりboost使っておけばいいじゃんという結論に落ち着いてなんだかなぁ 自作スマポ練り込んで使ってる人って居ます?
989 :
デフォルトの名無しさん :2010/06/02(水) 15:54:26
多分だけど、setは格納してる値でソートするから、 外部から書き換えられるとソートされた 状態を維持できない(かもしれない)。 たから書き込み禁止にしてるんじゃないかな。 対処としては、検索して見つかったのをeraseして、新たな値をinsertする、とかじゃないかな。
991 :
989 :2010/06/02(水) 16:05:28
GCC だからそうなった。 GCCについて part9
>>988 scoped_ptrに動的削除子とdeep copyの機能持たせただけのやつは自作してけっこう使ってる
自作でshared_ptr以上のものってなるとしんどいけど、shared_ptrじゃオーバーだろって時は自作してもいいんじゃね?
>>987 std::setのイテレータはconst_iteratorってちゃんとエラーに出てるじゃん
insert()で入れなされ
994 :
デフォルトの名無しさん :2010/06/02(水) 18:26:30
オブジェクトの配列を引数として渡すことはできるでしょうか? { Object obj[8] func( obj ); } func( Object *obj ){ obj[0]->getobj(); obj[1]->getobj(); } みたいな、わかりづらくてすみません。
>>994 当然
オブジェクトのリファレンスも渡す事ができる
template <int N>
func(Object (&obj)[N])
{
}
>>994 おっとまった
obj[0]->getobj();
obj[1]->getobj();
これはおかしいな
obj[0].getobj();
obj[1].getobj();
こうか
obj->getobj(); だろ
ツリー構造のテンプレートライブラリってあります?
setとか2分木の可能性 触れる部分は少ないが 参考にはなる
というかリファレンスじゃないと渡せないだろ。 即値で渡すと配列型からポインタに変換されてしまって動かないし、要素数書いても無視される。 一方でリファレンス使えば勝手に変換されることもないので、 テンプレートで要素数推論してObject[N]型へのリファレンスで渡せば問題なく通る。
void func(int *p, size_t n); template <size_t N> void func(int (&a)[N]) { func(a, N); } 通はこうするよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。