おもろいC++コードを貼るスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGtemplate<class t_base,
unsigned int t_cb=sizeof(t_base)>
class CAnySizeStruct{
public:
volatile char m_aby[t_cb];
CAnySizeStruct(){}
t_base& GetRef(){
return static_cast<t_base*>(m_aby);
}
};
0045デフォルトの名無しさん
2005/10/28(金) 14:07:41キャストのショックでそこまで見てなかったがそういえば正常終了じゃ困るな。
でも今日このコードのことを直接聞いてみたら
「試しに書いてみただけで使ってない。」
と聞いてちょっとホっとしながらコメントアウトした俺。
0046デフォルトの名無しさん
2005/10/28(金) 16:19:190047デフォルトの名無しさん
2005/10/28(金) 16:41:400048デフォルトの名無しさん
2005/10/28(金) 17:01:22回ってくるというのも若干アレだが、
そもそもリストの中身のポインタをキャストするのに
リストごとキャストしようとしたり
static_castをひねくりまわしてオブジェクトへのポインタの変換可能性を
チェックしようとしたりするあたりのことは
コードで実際に実験する前に止めておいてほしい気もする。
004940
2005/10/31(月) 11:35:44//これがTopレベルで宣言されてる段階で脳内に非常ベルが鳴り渡るわけだが。
class E{
KMap kmap;
KMap::iterator pos;
E(KMap& m, KMap::iterator p) : kmap(m), pos(p){;};
//略
template<int ix, typename T> T*& get(){
return (static_cast<T*&>(pos->second[ix]));
}
template<typename T> T*& get(){
return (reinterpret_cast<T*&>(pos->second[T::pos]));
}
};
//Nooooooooooooooooooooohhhhhhhh!!!!!!!!!!
//テンプレート使ってる意味もクラス使ってる意味もねぇぇぇぇ!!
005040
2005/10/31(月) 11:40:21正直ロジックに深く噛んでいるから移植担当の漏れの小手先では直せない。
となるとこのヤヴァさを英語で諭して直してもらわないとイカンのか・・・。
正直・・・ ○| ̄|_
005245
2005/11/02(水) 15:30:33は大嘘であったことが判明。よく調べたら思い切り実地で使われていた…。
005340
2005/11/07(月) 16:01:33struct KValRoot{
virtual ~KValRoot(void){;}
protected:
virtual void dummy(void) = 0;
};
template<typename T>
struct KVal : public KValRoot{
T* p;
KVal(T* pointer) : p(pointer) {;}
virtual ~KVal(void){;}
protected:
virtual void dummy(void){;}
};
typedef map<K,vector<KValRoot*> > KMap;
005440
2005/11/07(月) 16:02:10class E{
KMap kmap;
KMap::iterator pos;
E(KMap& m, KMap::iterator p) : kmap(m), pos(p){;};
//略
template<typename T> T* get(){
KValRoot* rvp = pos->second[T::pos];
if(!rt) {
return(0);
}
KVal<T>* vp = dynamic_cast<KVal*>(rvp);
if(!vp){
throw (new std::logic_error("bad_cast"));
}
return (vp->p);
}
template<typename T> void set(T* new_p){
pos->second[T::pos] = new KVal<T>(new_p);
}
};
005540
2005/11/07(月) 17:48:42class N{
//...
};
class A {
N n;
A(N nn) : n(nn) {;}
public:
static A* fun(N n) {return(new A(n));}
};
class B : public A {
public:
static B* fun(N n) {return((B*)A::fun(n));}
};
class C : public B {
public:
static B* fun(N n) {return((C*)B::fun(n));}
};
0056訂正
2005/11/07(月) 17:56:13正)static C* fun(N n) {return((C*)B::fun(n));}
まぁいずれにせよプログラムとしては誤りだがw。
AもBもCもPOD型ではないから一見データメンバが同じであるように見えたとしても
ポインタを無条件ノーチャックでキャストすることは不法だ。
0057デフォルトの名無しさん
2005/11/07(月) 22:01:290058デフォルトの名無しさん
2005/11/08(火) 12:03:09>>55みたいなコードを書いちゃう人の頭の中。
0059アッカーマン関数
2005/11/08(火) 14:57:25enum {value = Ack<m-1, Ack<m, n-1>::value>::value};
};
template<unsigned long long n> struct Ack<0, n> {
enum {value = n+1};
};
template <unsigned long long m> struct Ack<m, 0> {
enum {value = Ack<m-1, 1>::value};
};
template <> struct Ack<0, 0> {
enum {value = 1};
};
0060デフォルトの名無しさん
2005/11/08(火) 14:58:540061既出ならスマソ
2005/11/08(火) 16:53:16template<unsigned long long num, unsigned base> struct numeral {
enum { value = num%10 + (numeral<num/10, base>::value * base)};
};
template<unsigned base> struct numeral<0, base> {
enum {value = 0};
};
例えば、numeral<101000,2>::value のように書いて2進定数が使える。
0062デフォルトの名無しさん
2005/11/08(火) 18:37:470063デフォルトの名無しさん
2005/11/08(火) 18:46:49boostで似たようなテンプレートのレビューがあったな。
俺は
http://www.illegal-immigration.com/Riv/boost/binary_literal2.hpp
こっちが好きだけど。
0064デフォルトの名無しさん
2005/11/08(火) 18:55:53努力は認めるけど、おもしろみは少ないなあ…。
0065デフォルトの名無しさん
2005/11/08(火) 18:58:510が先頭に付くと8進になっちゃうって奴ね。
006683
2005/11/08(火) 23:23:20template<unsigned HI, unsigned LO, typename T>
T bitswap(T t)
{
assert(HI > LO);
assert(0 <= HI && HI < sizeof(T) * CHAR_BIT);
assert(0 <= LO && LO < sizeof(T) * CHAR_BIT);
unsigned shift = HI - LO;
t ^= (t & (1 << LO)) << shift;
t ^= (t & (1 << HI)) >> shift;
t ^= (t & (1 << LO)) << shift;
return t;
}
bitswap<4, 3>(10) と書くと18が返ってきます。
ダカラナンダッテノてのは俺が番言いたいです。
0067デフォルトの名無しさん
2005/11/09(水) 03:08:430068デフォルトの名無しさん
2005/11/09(水) 10:57:38馬、番、馬、番、番、番♪
0069デフォルトの名無しさん
2005/11/13(日) 14:54:000070デフォルトの名無しさん
2006/02/10(金) 19:23:350071デフォルトの名無しさん
2006/04/02(日) 17:36:290072デフォルトの名無しさん
2006/04/02(日) 18:09:17{
STRUCT *struct;
}STRUCT;
・
・
・
STRUCT *struct;
struct->struct = struct;
0073デフォルトの名無しさん
2006/04/02(日) 18:18:260074デフォルトの名無しさん
2006/04/02(日) 18:19:48.んヘ/V'ヘ
((( 'ヘ/V'ヘ)))
ゝ、._,ノ.
パカッ .γ"⌒ヽ,
.んヘ/V'ヘ
(*‘ω‘ *) ちん・・・!
( 'ヘ/V'ヘ|)
ゝ、._,ノ.
カチャン |||川||彡
ミ.γ"⌒ヽ, 彡
.んヘ/V'ヘ}
( 'ヘ/V'ヘ )
ゝ、._,ノ.
0075デフラグさん ◆mRgSYalFkQ
2006/04/05(水) 00:18:05[゚д゚] デフラグカンリョウ
/[_]b
| |
"""'''''''''(((()))**,,,,,............//////VVVVVV||||||}γγγω‘‘⌒⌒⌒ちんんんんゝゝゝノノノミ・・・ヽヽヽ川彡彡!(()))
___、、、ャッカカカカタタチハヘヘヘヘヘヘヘヘヘヘヘヘン゙゙゚
0076デフォルトの名無しさん
2006/05/24(水) 09:39:17require 'fileutils'
dirs = []
open('http://www.aaa-fuzoku.com/covergirl/go.js') { |fh|
fh.each_line { |l|
dirs << $1 if /..\/(.+)\/index-01.html/ === l
}
}
urls = Hash.new { |hash, dir| hash[dir] = [] }
dirs.each { |dir|
fid = /\d$/ === dir ? dir.sub(/\d$/, '') : dir
(1 .. 8).each { |n|
urls[dir] << "http://www.aaa-fuzoku.com/covergirl/#{dir}/#{fid}_0#{n}.jpg"
}
}
urls.each { |dir, us|
FileUtils.mkdir(dir)
us.each { |u|
puts u
begin
open(File.join(dir, File.basename(u)), 'w') { |out|
out.binmode
open(u) { |w|
w.binmode
out.write(w.read)
}
}
rescue
end
}
}
0077デフォルトの名無しさん
2006/06/20(火) 18:38:590078デフォルトの名無しさん
2006/06/22(木) 11:41:050079デフォルトの名無しさん
2006/09/12(火) 02:57:430080デフォルトの名無しさん
2006/09/28(木) 00:14:16あってもいいのだがな
0081デフォルトの名無しさん
2006/10/27(金) 05:20:23templateにしたらコンパイルタイムに計算してくれるから
少しだけ計算時間がへるかも
0082デフォルトの名無しさん
2006/11/01(水) 10:57:29でも型安全性0。
0083デフォルトの名無しさん
2007/02/27(火) 19:30:36 ̄ ̄7 ヘ/
/ ノ
|
/
|
|
/
0084デフォルトの名無しさん
2007/02/27(火) 19:32:540085デフォルトの名無しさん
2007/02/27(火) 20:04:310086デフォルトの名無しさん
2007/06/26(火) 06:33:410087デフォルトの名無しさん
2007/06/27(水) 11:06:460088デフォルトの名無しさん
2007/07/07(土) 09:51:45template<typename T> class protected_ptr
{
public:
protected_ptr() : pointer_(NULL) {}
~protected_ptr() {}
bool is_null() const { return (pointer_ == NULL); }
T* operator->() const { return pointer_; }
T& operator*() { return *pointer_; }
const protected_ptr<T>& operator=(T* ptr) { pointer_ = ptr; return *this; }
const protected_ptr<T>& operator=(const T& val) { *pointer_ = val; return *this; }
bool operator==(const protected_ptr<T>& ptr) const { return (pointer_ == ptr.pointer_); }
bool operator!=(const protected_ptr<T>& ptr) const { return (pointer_ != ptr.pointer_); }
bool operator==(T* ptr) const { return (pointer_ == ptr); }
bool operator!=(T* ptr) const { return (pointer_ != ptr); }
private:
T* pointer_;
};
0089デフォルトの名無しさん
2007/07/09(月) 08:40:52生のポインタだと整数型や違うポインタをキャストして
上書き出来ちゃうから、それを防いでる。
しかし、使い道は乏しいな…
0090デフォルトの名無しさん
2007/07/10(火) 08:49:42トレイトで元の型の情報を得られるようにすれば
もうちょっと使えるようになるかも。
あとは0との比較、代入をテンプレート特殊化
const版も用意すれば完璧
0091デフォルトの名無しさん
2007/07/10(火) 10:29:380092デフォルトの名無しさん
2007/07/10(火) 10:46:190093デフォルトの名無しさん
2007/07/10(火) 12:48:380094デフォルトの名無しさん
2007/07/13(金) 11:39:540095デフォルトの名無しさん
2007/07/13(金) 11:48:26■ このスレッドは過去ログ倉庫に格納されています