【C++】template 統合スレ -- Part6at TECH
【C++】template 統合スレ -- Part6 - 暇つぶし2ch751:745
05/07/19 23:17:21
やってみた>>747

make -k all
g++ -Wall main.cpp Class.cpp -c
g++ -Wall main.o Class.o -o a.exe
main.o(.text+0x25):main.cpp: undefined reference to `Class<int>::Class[in-charge]()'
collect2: ld returned 1 exit status
make: *** [all] Error 1

ムリポ

>>749を含めて出直してくる。これはイマの私の頭ではいくら考えても答えが出ない。
本を読むかg++のマニュアルを漁るか…

752:デフォルトの名無しさん
05/07/19 23:44:58
>>751
g++のinclude/bits/istream.tccより

// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
#if _GLIBCPP_EXTERN_TEMPLATE
extern template class basic_istream<char>;
extern template istream& ws(istream&);
extern template istream& operator>>(istream&, char&);
extern template istream& operator>>(istream&, char*)

753:デフォルトの名無しさん
05/07/23 19:33:12
template <class T> class foo;

template <class T> class baa{
 friend foo;
 int n;
public:
 baa() : n(777){}
};

template <class T> class foo : public baa<T>{
 int hoge;
public:
 void set_val( baa<T>& arg ){ hoge = arg.n; }
};

int main(){
 baa<int> b;
 foo<int> f;
 f.set_val( b );
 return 0;
}

インデントが全角スペースですいません
これだとarg.nにアクセス出来ないのですが、間違っている場所を教えて頂けないでしょうか
friend foo; が、やっぱり
template <class T> friend foo; なんでしょうか

754:デフォルトの名無しさん
05/07/23 19:45:24
>>753
g++ でコンパイルすると、
:4: error: ISO C++ forbids declaration of `foo' with no type
:4: error: `foo' is neither function nor member function; cannot be declared friend

まぁそれは置いとくとして、
 friend class foo<T>;
で通ったよ。

755:753
05/07/23 19:59:42
>>754
やっぱりclass指定しますよね
書き込む前にチェックしたサイトで、指定が無かったので、自分が間違っていたのかと

そうか、再度template <class T>付けるのは馬鹿でした。
VC6なので、Tが同じじゃなかったらアウトだったかも・・・良かった。

本当に助かりました。コンパイルまでして頂いてすいません。ありがとうございました。

756:デフォルトの名無しさん
05/07/23 20:13:13
baaっての…なんかプログラムがアホっぽくなるな。

757:デフォルトの名無しさん
05/07/23 22:22:39
>>755
friend かどうかっていう問題なのか?
baa<T>::n が private か protected/public かどうかっていう問題では?

758:デフォルトの名無しさん
05/07/23 22:47:57
>>757
vtableを避けるための小細工なんです
眉をしかめる人が多いと思いますが、自分しか使わないのでお見逃しを

759:デフォルトの名無しさん
05/07/23 23:36:56
>>758
よくわからないな。>>753 のを
template <class T> class baa{
protected:
 int n;
public:
 baa() : n(777){}
};
とすると VC6 だと vtable に関して状況が変わるの?

760:デフォルトの名無しさん
05/07/23 23:51:14
753がprotectedを知らなかったというオチ?

761:デフォルトの名無しさん
05/07/24 00:21:24
>>759
失礼、深読みしすぎてました。

しかしすいません、そうなると>>757で頂いたレスの意図が分からないです。
protectedすると、引数で他のbaaを受け取ったとき、nにアクセス出来るのでしょうか。

762:760
05/07/24 00:40:00
753のコードでは、bar<T>::nがprotectedならfoo<T>::set_valの中でarg.nにアクセスできると思っていたがそうではなかったようだ。
スマソ

763:デフォルトの名無しさん
05/07/24 01:03:17
>>761
アクセスできると思ってた。けど間違ってたのなら失礼。
・基本 class から 派生 class を public 継承したとき、
・基本 class の protected member である n について、
・派生 class から this の n にアクセスできる。
・派生 class から this 以外の n にアクセスできない。
ということかな?も一回勉強しなおそ。

・ある class の private member である n について、
・その class から this の n にアクセスできる。
・その class から this 以外の n にアクセスできる。
というのは間違いないと思うんだけど。

あと自分の VC7 は、これに関して template class かそうでないかによって
コンパイル結果が違うのもよくわからない。

764:デフォルトの名無しさん
05/07/24 02:17:54
勉強しなおした。>>763は間違い多数につきスルーよろしく。失礼しますた。


765:デフォルトの名無しさん
05/07/28 18:38:46
Compile-time if
で型でなく値を返すにはどうすればいいのでしょうか?
int v= boost::mpl::if_c< (sizeof(T) <= sizeof(double)), 10, 20 >::Value
はだめでした


766:デフォルトの名無しさん
05/07/28 19:41:12
>>765
boost::mpl::int_
を使って、型にマップすればいい。

767:デフォルトの名無しさん
05/07/28 19:56:38
>>765
struct R0 {
enum {value = 10};
};
struct R1 {
enum {value = 20};
};
template <typename T>
int func ()
{
typedef typename boost::mpl::if_c <(sizeof (T) <= sizeof (double)), R0, R1>::type Result;
return Result::value;
}


768:デフォルトの名無しさん
05/07/29 10:42:43
template<CONTANER>
class CmyContaner
{
typedef CONTANER::iterator iterator_type;
};
としたらコンパイル通らなかったんですが、
CONTANER::iteratorはできないってことなのでしょうか?

769:デフォルトの名無しさん
05/07/29 11:35:24
>>768
-typedef CONTANER::iterator iterator_type;
+typedef typename CONTANER::iterator iterator_type;


770:デフォルトの名無しさん
05/07/29 15:37:41
そのままじゃ型名かメンバ変数かわからんからね。

> CONTANER
北斗の拳の主題歌を思い出すスペルミスだな。

771:デフォルトの名無しさん
05/07/29 16:46:27
>>768
ここもだね
-template<CONTANER>
+template<typename CONTANER>


772:デフォルトの名無しさん
05/07/30 08:40:48
template<Functor>
class MyMethod
{
public:
Functor f_
MyMethod(Functor f):f(f_)
{}
value()
{
f_(10);
}
};

class MyClass
{
public:
struct MyFunctor{
operator()(int a)
{
std::cout << a;
}myFunc;

//MyMethod<MyFunctor> myMethod(myFunc);//コンパイル通らない
MyMethod<MyFunctor> myMethod(MyFunctor);//なぜかコンパイル通る
value(){
myMethod.value();//左側がクラス 構造体 共用体でありません と怒られる
}
};

クラスの中でfunctorを定義したら動かなくなりました。
回避方法はないのでしょうか?

773:デフォルトの名無しさん
05/07/30 09:48:49
>>772
>クラスの中でfunctorを定義したら動かなくなりました。
クラスの外でfunctorを定義したらそれ動く?


774:デフォルトの名無しさん
05/07/30 13:47:17
>772
とりあえず } が 1 個足りない。
} myFunc; の前に 1 個ある、でいいのか?

>MyMethod<MyFunctor> myMethod(MyFunctor);
これだと MyFunctor 型の引数をとり、MyMethod<MyFunctor> 型を返すメンバ関数 myMethod を
宣言しているんじゃまいか?

>//MyMethod<MyFunctor> myMethod(myFunc);//コンパイル通らない
なんでメンバ変数を宣言してるのに初期化しようとしてるの?

MyMethod<MyFunctor> myMethod;
MyClass() : myMethod(myFunc) {}

じゃねーのか?あと↑だと myFunc との初期化順序が問題になる場合があるかも。
今回の場合、MyClass() : myMethod(MyFunctor()) でいいような気もするが。

775:772
05/07/30 14:59:26
すみません } が1つぬけてました。

template<Functor> class MyMethod
にclass の外で定義したfunctorを使うと
意図したとうりの動きをすることを確認しています。

776:デフォルトの名無しさん
05/07/30 15:06:57
>>775
>class の外で定義したfunctorを使うと
>意図したとうりの動きをすることを確認しています。
本当に?
コピペにかなりミスがあると思うよ
MyMethod::value()
MyClass::MyFunctor::operator()(int a)
の返値の型は?

もし本当に動くなら処理系を教えてね


777:776
05/07/30 15:09:07
たぶんこんなことしたいのかな
template <typename Functor>
struct MyMethod {
Functor f_;
MyMethod (Functor f): f_(f) {}
void value () {f_ (10);}
};
struct MyClass {
struct MyFunctor {
void operator () (int a) {
std::cout << a;
}
} myFunc;
MyMethod <MyFunctor> myMethod;
MyClass (): myFunc (), myMethod(myFunc) {}
void value() {myMethod.value();}
};


778:デフォルトの名無しさん
05/08/02 22:23:20
template<X>
class CHoge
{public:
CHoge( X= typeof(x) ) {}
};
なんてできないの?
自動で型判別してほしい。
自動判別した型を使ってCompile-time Ifもできるとさらにいいんだけど

779:デフォルトの名無しさん
05/08/02 23:18:35
>>778
>自動で型判別してほしい。
>自動判別した型を使ってCompile-time Ifもできるとさらにいいんだけど
これらはできるけど
例で何がしたいのかさっぱり分かりません


780:デフォルトの名無しさん
05/08/05 23:15:18
template< ArrayType >
function( ArrayType array)
{
Compile-time If (ArrayType はポインタの配列?)
{
int a= array[0]->value;
}else{
int a= array[0].value;
}
こんなことがしたい

781:デフォルトの名無しさん
05/08/05 23:30:47
type_traitsでいいんじゃないの?

782:デフォルトの名無しさん
05/08/06 00:52:15
個人的には値の配列とポインタの配列を静的多相に扱おうとする行為そのものに
異議を申し立てたい.

783:デフォルトの名無しさん
05/08/06 02:36:31
次のようなコードが、Visual C++では通るけどGCCでは通りません。

オブジェクトの名前と番号の型を保持する構造体を用意

template<class S,class I>
struct Types
{
  typedef S String;
  typedef I Integer;
};

この定義を受け取って型を定義するベースクラスを作成

template<class T>
struct Base
{
  typedef typename T::String StringType;
  typedef typename T::Integer IntegerType;
};

そして、これを利用するサブクラスを作成。

template<class T>
struct Derived : public Base<T>
{
  StringType name; //!< ここでコンパイルエラー
  IntegerType number; //!< 同様
};

typedef Types<std::string,int> StdTypes;
Derived<StdTypes> derived;


784:デフォルトの名無しさん
05/08/06 02:38:23
続き

以下のように書けばGCCでもコンパイルは通ります。

typename Derived::StringType name;
typename Derived::IntegerType number;

こんな面倒な書き方しかできないなら、
わざわざベースクラスにtypedefした意味がないんですが
何かいい方法ありませんか?


785:デフォルトの名無しさん
05/08/06 02:58:54
>>783-784
Base の定義中に typename が必要な理由を知っていれば、無理だと予想が付くだろうに。

786:デフォルトの名無しさん
05/08/06 07:54:33
>>783-784
俺だったら
Base::Stringと書けないか
Derivedの中にusing Base::String;と書けばStringが使えないか
の2つをまず試してみる。これでできるかどうかはもちろんしらんが。

787:デフォルトの名無しさん
05/08/06 09:04:33
Baseを使うなら、
typename Base<T>::StringType name;
typename Base<T>::IntegerType number;
こうなるから、これこそ、
> わざわざベースクラスにtypedefした意味がない
ので、>>784のやり方が良いだろう。

VC++もそのうち>>783は駄目になることでしょう。


788:デフォルトの名無しさん
05/08/06 09:32:41
>>784
それVC7.1のバグらしい。
面倒見が良すぎて、typenameを本来ならば書かなければならない
所を、曖昧さがない場合は無くても通してしまう。

VC7.1でもちゃんと typename は書くべき。

789:デフォルトの名無しさん
05/08/06 12:59:29
このスレの難読コードをみて
おれにとて


C++はなかたことになた

790:デフォルトの名無しさん
05/08/06 13:03:53
そんなだから、未だに君にとってこの程度が「難読コード」なんだよ。

791:デフォルトの名無しさん
05/08/06 13:07:40
俺もtemplateのコードは可読性が低いと思うよ
唯一の弱点だな

792:デフォルトの名無しさん
05/08/06 13:32:35
テンプレートとC++「本体」って明らかに別の言語だよな。
概念の異なる2つの言語が混在してるんだから、
可読性が低いのは当たり前。


793:デフォルトの名無しさん
05/08/06 15:19:32
>>792
じゃあどういう構文にすればいいよ?


794:デフォルトの名無しさん
05/08/06 19:15:56
構文の話なのかな。

795:デフォルトの名無しさん
05/08/06 19:21:27
>>784
template<class T>
struct Derived : public Base<T>
{
typedef Base <T> Base_;
typedef typename Base_::StringType StringType;
typedef typename Base_::IntegerType IntegerType;
StringType name;
IntegerType number;
};


796:デフォルトの名無しさん
05/08/06 20:27:48
>>795 意味無いじゃん。

797:神゜
05/08/06 20:49:53
そろそろ俺の出番か?

798:デフォルトの名無しさん
05/08/06 21:04:29
>>784
ベースクラスがテンプレート依存でなければ StringType,IntegerType
は見えるが、そうでない場合は 795 のように書く必要がある。

実はずっと前の GCC で VC7.1 みたくエラーにならない時期が
あったんだが、バージョン上げたらエラーになったんで仕様を
確認したことがあったのを思い出したよ。

799:デフォルトの名無しさん
05/08/06 23:17:54
>>798
2.95あたりは確かそうだったね


800:デフォルトの名無しさん
05/08/07 16:48:53
template<class A>
struct Foo
{
  template<class B>
  struct Bar
  {
  };
};

このBarだけを特殊化するのって、GCCでは

template<>template<>
struct Foo<int>::Bar<int>

って書かなきゃならないんだね。
VC++7.1では

template<>
struct Foo<int>::Bar<int>

で通るんだけど、これはバグなのかな?


801:デフォルトの名無しさん
05/08/07 16:55:26
>>800
どっちが規格に準じてるかによるね


802:デフォルトの名無しさん
05/08/07 17:00:26
>>800
14.7.3.17 より
"If the declaration of an explicit specialization for such a member appears in namespace scope, the member declaration shall be preceded by a template<> for each enclosing class template that is explicitly specialized."

template<> template<> ... と繰り返すのが正解っぽい。

803:デフォルトの名無しさん
05/08/07 17:10:09
>>800
gccを信じてそちらに合わせておけ。

804:デフォルトの名無しさん
05/08/07 17:27:08
>>800
gccのバージョンは何?
g++ 3.3.5
だとそれ両方とも通るんだけど
新しいのは通らないのかな?


805:デフォルトの名無しさん
05/08/07 18:19:07
template <class T>
typename enable_if<boost::is_integral<T>, void>::type
foo(T t) {}
で関数を定義したりできないのはわかるけど
これでclassのコンストラクターを定義したりしなかったりを決めると

コンストラクターに戻り値が定義されています

と怒られる。何か方法ないのでしょうか?
template <class T>
class A{
typename enable_if<boost::is_integral<T>, void>::type
A(T t) { }
}

806:デフォルトの名無しさん
05/08/07 18:44:57
>>805
SFINAEは戻り値の型でやる方法と(デフォルト)引数の型でやる方法の2通りできて,
コンストラクタの場合は戻り値の型を指定できないですから引数の型のほうでやります.

template<class T>
class T{
A(T t, typename enable_if<boost::is_integral<T> >::type * = 0){}
};

こんな感じで.逆に演算子関数の場合は余計なデフォルト引数を指定できないので
戻り値型で,という感じになると思います.

807:デフォルトの名無しさん
05/08/07 22:38:01
enable_ifが何をするもんなのか、未だにわかんねえ。
てか、何年英語の勉強してもboostのドキュメントさえ読めない俺ってすげえよ。
よっぽど英語の才能が無いんだな。

808:デフォルトの名無しさん
05/08/07 22:41:04
テメェは自己紹介がしたいだけだろ
分からねぇんだったらイチイチ出てくんな

809:デフォルトの名無しさん
05/08/07 22:50:40
>>807
SFINAEによるオーバーロードセットのコントロールを簡単に
行うためのユーティリティ。

英語分からなくてもC++分かるんならひたすらソース詠めば
何となく見えてくる、かもよ。

810:デフォルトの名無しさん
05/08/07 22:53:46
>>808
なにキレてんのキミ。
相手以上の駄レス書いてたら意味無いのに。

811:デフォルトの名無しさん
05/08/07 22:59:07
駄レスとかいってたら、ほとんどがそうだろw

812:デフォルトの名無しさん
05/08/07 23:00:10
ほとんどがそうならなおのこと
突然特定のレスにキレる理由が無いよ。

813:デフォルトの名無しさん
05/08/07 23:03:27
自己顕示欲丸出しの厨房がウザイだけだろ
まあ、どこにでもいるからいちいちキレるのもどうかと思うが

814:デフォルトの名無しさん
05/08/07 23:16:33
キレて説教するほうがよっぽど自己顕示欲激しいと思う。
世に言う自爆ですな。アホくさ。

815:デフォルトの名無しさん
05/08/07 23:17:52
URLリンク(www.boost.org)
ここの「1.2 Background」は、何が問題だって言ってるんですか?

816:デフォルトの名無しさん
05/08/07 23:20:01
説教がどう自己顕示欲につながるんだ??

817:デフォルトの名無しさん
05/08/07 23:22:14
>>814
ワロス

818:デフォルトの名無しさん
05/08/07 23:29:27
>>816
キレるたびにいちいちスレ違いの書き込みするような奴が
自己顕示欲薄いって言い張る気?

819:デフォルトの名無しさん
05/08/07 23:30:34
enable_ifがわからんってののどこが自己顕示欲に繋がるのかもわからんけどな

820:デフォルトの名無しさん
05/08/07 23:30:49
>>818
藻前もキレてるじゃん
あと煽り耐性なさ過ぎ
いい加減スルーしろよ

821:デフォルトの名無しさん
05/08/07 23:31:47
>>815
いや,そこの部分は別に何かが問題だなんて書いてないです.
単にSFINAEというのがどう機能するか(そしてなぜそのような機能が必要なのか)
を説明しているだけです.

822:デフォルトの名無しさん
05/08/07 23:32:15
816が煽りには見えないけどなあ。
普通にズレてるだけで。

823:デフォルトの名無しさん
05/08/07 23:32:55
>>815
あっと,「もしSFINAEがなければこういうことが問題だよね」というのは書いてますけれど.

824:デフォルトの名無しさん
05/08/07 23:35:03
>>822
分かったからもう出てくんな

825:デフォルトの名無しさん
05/08/07 23:40:11
本日の推奨NG
「。」「顕示」「煽り」「キレ」
すっきりして(・∀・)イイ!!

826:デフォルトの名無しさん
05/08/08 02:07:36
expressional template
VC.net2003だと、ちょっと複雑な式を書いただけで
コンパイル通らない。
そういうものなの?
gccなら通るのかな

827:デフォルトの名無しさん
05/08/08 02:12:44
>>826 その「ちょっと複雑な式」とやらを晒すとレスが付くかもしれない。

828:デフォルトの名無しさん
05/08/08 03:35:21
>>826
現存する如何なるコンパイラでも通らない程複雑(広義の)なコードに問題ありに100円。


829:デフォルトの名無しさん
05/08/08 04:40:19
ネストが17超えるとか?


830:デフォルトの名無しさん
05/08/08 15:16:31
いろんな要素が混じってるので必ずしもexpressional templateが
原因でないのかもしれないけど

boost::numeric::ublas::matrix & A(){return A_ }
boost::numeric::ublas::matrix & B(){return B_ }

B() = prod( A(), A())*3 + B() + ....

こんな感じかな.全部はさらせないのですまそ

831:デフォルトの名無しさん
05/08/09 01:41:27
>>830
エラー貼ったがいいよ
もし膨大なら
再現するコンパイル可能な最小のコードを貼って


832:831
05/08/09 01:45:25
>コンパイル可能な
おっとコンパイルは通らないのか

>あなたがコンパイル通らないことを理不尽に思う
に訂正

ようするにテストする側の身になってコードを
貼ってください


833:デフォルトの名無しさん
05/08/09 11:45:51
>>830
>こんな感じかな.全部はさらせないのですまそ

じゃあ、他の人にエラーの原因を調べてもらうのも諦める事ですな。
証拠不十分なまま、証言台に立つような物ですぞ。

834:デフォルトの名無しさん
05/08/20 08:39:28
だれもいない

835:デフォルトの名無しさん
05/08/20 20:28:20
ホントにだれもいないのかよ

836:デフォルトの名無しさん
05/08/20 20:39:26
いねーよ

837:デフォルトの名無しさん
05/08/20 20:40:28
質問やら話題があれば人は自然と集まってくる。

838:デフォルトの名無しさん
05/08/20 20:52:57
おまえら
”てんぷれーと”にだまされてないか?
”しーぷらぷらのてんぷれーと”って結局あれだよ。
中途半端。
そう中途半端。
LISPに比べたら。
全然読み易くならない。
いろんな括弧であふれてLISPの方がまだサルのように読みやすい。
まあここにタムロしてるおまえらの言い分は判ってるよ
こうだろ、静的カタカタ型が重要なんです!
LISPじゃすぴーどでないよプププ
とかな。
ばーか。
カタなんかより柔軟性なんだよこのご時世はよ
カタカタうるせーのなんのって、笑うわ。
C++考えた奴みたいにハゲろ
全員

839:デフォルトの名無しさん
05/08/20 20:59:39
確かに、「ネイティブコード吐く言語じゃないと速度が」
とか必死に言ってる奴に優秀なプログラマはいないな。


840:デフォルトの名無しさん
05/08/20 21:10:42
しーぷらぷらの処理系。
てんぷれーとバグだらけ。
笑うわ。
いったい何年てんぷれーとやってんだよ
おまえらがべんだーの修正待つあいだに
おれLISPで新しいマクロどっさり作る
生産性バカたけぇーわLISPはよ
LISPはカタないからすぴーどでないよプププて、
そりゃ頭がかてえ証拠だな。
そんな奴は引退したほーがいいんじゃねーかなあ
LISPにカタないなら組み込めよ、ハゲども
ぶーとすとらっぷとか考えろよ
わかるか?ぶーとすとらっぷって。
しーぷらぷらにはそんながいねんはないかもなあ。
最適化なんかやりやすいなーすいすいいけるぜ
こんすの海の中にいると不満なんてすぐ解消する
それがLISP。
まあ頭のかたいカタカタ野郎は
やっぱりC++考えた奴みたいにハゲろ
全員

841:デフォルトの名無しさん
05/08/20 21:16:51
>>839よりは優秀だけどね。

842:マイク ◆yrBrqfF1Ew
05/08/20 21:31:32
C++をしーぷらぷらなんて言うのは無能。

843:デフォルトの名無しさん
05/08/20 21:59:52
C++でLisp系の俺言語&処理系作るのが最近の俺の趣味なんだが、
なんかこいつの仲間と思われたくないな、恥ずかしくて。

844:デフォルトの名無しさん
05/08/20 22:59:08
>>842
シープラスプラス?
それともシーたすたす?


845:デフォルトの名無しさん
05/08/20 23:33:28
しーいんくりめんと

846:デフォルトの名無しさん
05/08/20 23:43:58
C++
後置ということは、まだ本当のC++にはであてないわけだ

847:デフォルトの名無しさん
05/08/20 23:45:24
C++には出会えている
++Cに出会えてないだけ

848:デフォルトの名無しさん
05/08/21 00:37:45
838は、C++のテンプレートが読みにくく、
コンパイラのバグのことも分かっていて、
C++作った人物についても詳しいようだな

849:デフォルトの名無しさん
05/08/21 00:48:03
Schemeの純粋指向にはあこがれるけど、Lispはどうでもいいや。
継続は面白いな。

>LISPはカタないからすぴーどでないよプププて、
型が無いと遅くなるつうのは初耳ですが、どこの情報?

850:デフォルトの名無しさん
05/08/21 01:06:13
>>849
VBのバリアント型みたくデータ側に型情報があるから
オブジェクトを参照するたびに動的な判定が毎回必要ってことだよ。
型判定に値の取り出しとか最低でもCの3倍以上のコストが掛かる。
Rubyが遅いのもこれがかなり影響してる。

851:デフォルトの名無しさん
05/08/21 01:09:17
でも日本語は不自由なようだ。

852:851
05/08/21 01:09:45
>>838

853:デフォルトの名無しさん
05/08/21 01:25:23
> オブジェクトを参照するたびに動的な判定が毎回必要ってことだよ。
随分ダサい実装ですね。

854:デフォルトの名無しさん
05/08/21 01:41:07
そのダサイ実装を越えたところに桃源郷が

855:デフォルトの名無しさん
05/08/21 01:41:43
ももげんごう?

856:デフォルトの名無しさん
05/08/21 12:12:15
ももげんごう(←なか変換できない)

857:デフォルトの名無しさん
05/08/21 14:42:55
桃源郷=Xanadu キサナドゥ

858:デフォルトの名無しさん
05/08/22 00:38:44
>>850
正直、有名なコンパイラならそんなださい実装は少ないよ。
Common Lispには型指定の構文があるくらいだし。

859:デフォルトの名無しさん
05/08/23 09:18:30
数値計算したい人は
速度気にしないならlistでなくてMatlab使う

860:デフォルトの名無しさん
05/08/23 15:06:35
>>858
CLOS基地外氏ね
スレ違いだし

861:デフォルトの名無しさん
05/08/23 15:34:43
だれもいないからとか言うから

862:デフォルトの名無しさん
05/08/23 16:29:46
人稲杉なので、チラシの裏

boost::bind は、bind( f, _1, _2, a, b, _1 ) を行うことで、
func::return_type ( A1 & a1, A2 & a2 ) というファンクタを返すけど、
この _1 や _2 を、_decimal や、_text、_float のような書式指定プレイスホルダに
置き換えて、以下のようにすれば、タイプセーフな printf が出来るなと
考えたことがあった。

function< void( int ) > f = format( cout, "a = ", _hex, endl );
// ↑ cout << "a=" << %x << endl; と同じ事を行うファンクタを返す。
f( 10 ); // cout << "a=" << hex << 10 << endl;
f("aaa"); // コンパイルエラー

上の形とは違うけどその思想に基づいて実際に作ってみたことがある。
でも結局実用では (w)sprintf しか使わなかった。勉強にはなったけどね。
template プログラミングは楽しいけど、冷静なるとしなくていいことまで
テンプレート化してたりしていることがあるので気をつけないと。

863:デフォルトの名無しさん
05/08/23 17:12:40
>>862
> 冷静なるとしなくていいことまでテンプレート化してたりしていることがある
昨夜、そんな関数テンプレートを必死で非テンプレート関数に直してた・・・。
数日前に必死で関数テンプレートにした箇所だったのだけど・・・。

864:デフォルトの名無しさん
05/08/24 12:24:27
template<typename X_TYPE>
void xxx(X_TYPE x)
{}
として型の自動認識の手間減らしは多用するな

865:デフォルトの名無しさん
05/08/24 13:32:40
そうね。時々やる。いっそのこと型を書くのはオプションにして
MLみたいに型推論してくれればいいのにと思う。


866:デフォルトの名無しさん
05/08/24 17:50:00
C++ 0xだとそんな機能が追加されるとかされないとか。

867:デフォルトの名無しさん
05/08/28 09:36:27

テンプレートがちんぷんかんぷんでまったく理解できない私に
理解できるようになる方法を教えてください。まじで。


868:デフォルトの名無しさん
05/08/28 11:02:49
引数の型を使うときに決められるんだよ。

869:デフォルトの名無しさん
05/08/28 11:35:27
>>867
騙されたと思ってstd::min()でも使って味噌。

870:デフォルトの名無しさん
05/08/28 13:22:51
せめてstd::vector くらい使わないとありがたみ沸かないだろう。

871:デフォルトの名無しさん
05/08/28 18:04:02
>>867
つ[C++ Templates(英文)]

872:デフォルトの名無しさん
05/08/29 06:58:30
STL バンザイ

873:デフォルトの名無しさん
05/08/29 21:56:02
STLとboostが無かったら俺C++使いつづけて無かったよ。

874:デフォルトの名無しさん
05/08/29 22:30:29
俺もそうだ。

875:デフォルトの名無しさん
05/09/03 00:21:09
会社でtemplate使うなって言われたんだけど…
何故?

876:デフォルトの名無しさん
05/09/03 00:24:13
会社で使いこなせるヤシがいないからと邪推

877:デフォルトの名無しさん
05/09/03 00:31:06
代わりにLISP使え

もっと困るかもな
へへ

878:デフォルトの名無しさん
05/09/03 03:19:35
>>875
それは、あなたが馬鹿だからです。

879:デフォルトの名無しさん
05/09/03 03:26:37
お前だけは使うなって言われたなら
そうかもしれないけどさ

880:デフォルトの名無しさん
05/09/03 09:13:41
>>875
まともな会社にうつるべし

881:デフォルトの名無しさん
05/09/03 09:55:32
>>875
会社に聞け。
ここで聞くようなやつは>>878に決定。

882:デフォルトの名無しさん
05/09/03 10:02:04
>>881
なんでそんな必死にこの話題にフタしたがるの?
コンプレックスでも刺激された?w

883:デフォルトの名無しさん
05/09/03 11:09:31
>>882
頭、大丈夫か?

884:デフォルトの名無しさん
05/09/03 14:45:37
VC6のプログラム保守してるとかじゃないのか>875


885:デフォルトの名無しさん
05/09/03 22:33:39
>>883
大丈夫だよ。
質問に答えられない誰かさんの頭は大丈夫じゃないみたいだけど。

886:デフォルトの名無しさん
05/09/04 03:17:12
・移植性重視
・扱える開発者が少ない or メンテする人が固定とは限らない

のどっちかだろうねえ
後者の事情のほうが多いと思うけども

887:デフォルトの名無しさん
05/09/09 02:16:23
管理職の団塊世代が、ピュアなC以外理解できないとか


888:デフォルトの名無しさん
05/09/09 22:28:28
名前空間→記述が冗長すぎる
テンプレート→制限が多すぎる
クラス→継承が可読性を悪化させる
その他→コンパイル時間が長すぎる

889:デフォルトの名無しさん
05/09/09 23:39:18
C++→俺が解からない

890:デフォルトの名無しさん
05/09/09 23:45:15
俺が解からない→みんなも解からない

891:デフォルトの名無しさん
05/09/10 02:04:02
>>886
>移植性重視

templateって移植性下がるの?

892:デフォルトの名無しさん
05/09/10 02:33:11
例えばGCCと心中するつもりならGCCで動けばOKって人もいるでしょ

893:デフォルトの名無しさん
05/09/10 02:46:27
>>891
ある程度ISO C++に準拠したコンパイラがない環境には移植できなったりだとか。

894:デフォルトの名無しさん
05/09/10 03:16:30
少なくとも、vc7.1とgccの両方で動くテンプレートくらい書けないと
話にならないと思うけど。


895:デフォルトの名無しさん
05/09/10 12:53:08
VC7.1とgcc3.3以降で動くテンプレート書くのは簡単だろ、どっちもほぼ100%標準準拠なんだから。
むしろVC6とかgcc3.2とかで動くか動かないか判断する方が難しいと思われ。

896:デフォルトの名無しさん
05/09/10 13:14:28
>>895
VC6とgcc3.2以前はもうあきらめた。
というかエラーメッセージすらとんちんかんな時があるのが頭痛い。

昔の仕事のプロジェクトコードのメンテでちょっとしたテンプレート書いてとかで
引っかかると泣きたくなる。


897:デフォルトの名無しさん
05/09/10 13:25:22
>>894-895
まるで、複数コンパイラで有効なテンプレートを書くのが上級者であるかのような言い方だな。
そういった汎用性のあるテンプレートは入門者レベルの機能しか使ってない。
君らは、入門者レベルのテンプレートしか書いたことないんだろ?

898:デフォルトの名無しさん
05/09/10 13:31:55
スレの存在を否定するような行為が、目下のベストな対処法

「技巧に走らない」

899:デフォルトの名無しさん
05/09/10 14:04:38
>>897
> であるかのような言い方だな。
印象だけでものを書く場合、その印象がトンチンカンだと
残りの文章がすべてトンチンカンになるから今後は気をつけな。

900:デフォルトの名無しさん
05/09/10 14:25:57
シンプル伊豆ベスト

901:デフォルトの名無しさん
05/09/10 15:15:35
>>897
「入門者レベル」とか「汎用性のある」とか、
自分が「上級者」じゃない事がバレバレなんですがw

まぁ、恥の上塗りだけはしないようになw


902:名無しさん@そうだ選挙に行こう
05/09/10 18:43:40
>>888
つまり、templateに限らずC++は糞だって事で包茎?

903:名無しさん@そうだ選挙に行こう
05/09/10 19:37:56
ていうかお前が包茎。

904:名無しさん@そうだ選挙に行こう
05/09/10 19:45:33
24時間テレビ C++ は地球を救う

905:名無しさん@そうだ選挙に行こう
05/09/10 20:09:37
>>902,904
んなこたーない。


906:名無しさん@そうだ選挙に行こう
05/09/10 22:11:14
>>894は馬鹿だな。

907:名無しさん@そうだ選挙に行こう
05/09/11 01:31:57
894は、VC以外でも通るように、typenameちゃんと書けとか
その程度の意味じゃねえの?

908:名無しさん@そうだ選挙に行こう
05/09/11 05:40:17
言語仕様が複雑すぎて処理系が追いつかないのは本末転倒

言語仕様満たしてから最適化とかやれよ馬鹿ベンダーはよ
現実逃避してんじゃねーよ

909:名無しさん@そうだ選挙に行こう
05/09/11 07:05:25
ヒント:需要と供給

910:名無しさん@そうだ選挙に行こう
05/09/11 09:16:30
つまりDelphiが最強ということになるな。

911:名無しさん@そうだ選挙に行こう
05/09/11 09:37:08
Delphi知らないんだけどtemplateみたいなのあるの?

912:名無しさん@そうだ選挙に行こう
05/09/11 09:44:31
あるか!

913:名無しさん@そうだ選挙に行こう
05/09/11 09:52:58
なぜ怒る・・・。
そこがDelphi信者のコンプレックスなのか?

914:名無しさん@そうだ選挙に行こう
05/09/11 09:57:55
でもDelphiってすごいよね
一代でここまでメジャーになった言語パッケージってないでしょ
それともPascalの下積みがあったから?

915:名無しさん@そうだ選挙に行こう
05/09/11 10:18:13
>>914
世間ではC#の方がメジャーだと思うがね。

916:名無しさん@そうだ選挙に行こう
05/09/11 10:20:04
C#は単なるM$の宣伝力だと思うけど

917:名無しさん@そうだ選挙に行こう
05/09/11 11:13:26
>>916
CとかC++から名前の連続性もあるしね。


918:名無しさん@そうだ選挙に行こう
05/09/11 12:07:50
C#なんて使って製品開発とかしてる香具師っているの?

919:名無しさん@そうだ選挙に行こう
05/09/11 14:40:54
天下のM$がVBで真似したぐらいだからな
当時はRADは斬新な開発環境だった

920:名無しさん@そうだ選挙に行こう
05/09/11 15:18:44
Delphi使いこそプログラマの頂点ということか。

921:名無しさん@そうだ選挙に行こう
05/09/11 16:34:19
Delphiが当初からMS謹製であったならば、VBだ、MFCだ、ATLだ、WTLだ、
STLだ、.Netだ、C#だ、C++/CLIだといったことで右往左往することもなく
10年間一貫とした言語体制、RAD環境、爆速コンパイル、コンポーネント化
による高い生産性等々を皆が維持・共有できたかと思うと残念でならないよ。

922:名無しさん@そうだ選挙に行こう
05/09/11 16:49:55
C#って、Delphi作った香具師が理想の言語として設計したんだろ。

Delphi信者御苦労様w


923:名無しさん@そうだ選挙に行こう
05/09/11 18:34:04
まだDel厨いたのか
そろそろ博物館に行けよ

924:名無しさん@そうだ選挙に行こう
05/09/11 20:14:45
博物館の恐竜が一緒に浮かれて踊ったぜ

925:名無しさん@そうだ選挙に行こう
05/09/11 23:35:20
>>921
STLだけその中で異質だな。

926:デフォルトの名無しさん
05/09/12 09:47:06
予想通り嫌Del厨が暴れることになったか・・・

927:デフォルトの名無しさん
05/09/12 11:54:51
つか、スレ違いうぜぇですよ?

928:デフォルトの名無しさん
05/09/12 11:58:56
>>924
子門乙

929:デフォルトの名無しさん
05/09/14 15:45:52
template< typename char_type, tepename char_traits >
std::basic_ostream< char_type, char_traits >& operator<< ( std::basic_ostream< char_type, char_traits >& stream, const int& value )
{
stream << "value = " << value << endl;
return stream;
}

この関数内で文字列リテラル"value = "を
char_type がcharなら、"value = "
char_type がwcharなら、L"value = "
にしたいんですが、どうしたら良いでしょうか?

930:デフォルトの名無しさん
05/09/14 16:12:57
>>929
テンプレートの特殊化か、オーバーライドで解決させる。

ex)
inline char const * choice( char const * s, wchar_t const *, char )
{
 return s;
}
inline wchar_t const * choice( char const *, wchar_t const * s, wchar_t )
{
 return s;
}

stream << choice("value=",L"value=",char_type()) << value << endl;

931:929
05/09/14 16:31:48
>>930
#define literal_str( char_type, str ) choice( str, L##str, char_type##() )
付きで採用しますた。
ありがとうございました。

932:デフォルトの名無しさん
05/09/14 17:21:04
>>931
二番目の##は余計。

933:929
05/09/14 21:31:05
だからなんだよこのタコ助!

934:デフォルトの名無しさん
05/09/14 22:41:20
確かに余計だな。

935:929
05/09/15 00:04:09
>>933
>>929の著作権は私にあります。
なんなら出るとこ出ても・・
と思いましたがきっと>>933
私にインスパイヤされて誕生した新種なんでしょう。
今回はかんべんしてやります。

936:デフォルトの名無しさん
05/09/15 11:53:02
template <class T>
void f1(T t)
{
 f2(t);
}

void f2(int) {}

int main()
{
 f1(1);
}

というコードは正しいのでしょうか?

VC7.1 ではコンパイル可能で comeau ではコンパイルできません。

937:デフォルトの名無しさん
05/09/15 12:50:56
>>936
comeauだとなんてエラーが出るの?


938:636
05/09/15 13:09:16
>>637
identifier "f2" is undefined
detected during instantiation of "void f1(T) [with T=int]"

というエラーです。strict mode のみのようです。

ちなみに、ユーザ定義型の場合は期待通りにコンパイルできました。

template <class T>
void f1(T t)
{
 f2(t);
}

struct a{};
void f2(a) {}

namespace adl
{
 struct a{};
 void f2(a) {}
}

int main()
{
 f1(a());
 f1(adl::a());
}

このコードはコンパイル成功。

939:デフォルトの名無しさん
05/09/15 14:23:18
>>936
gcc3.4.4(MinGW) で、-Wallで通る。

940:デフォルトの名無しさん
05/09/15 14:26:00
>>938
プロトタイプ宣言したら?

941:デフォルトの名無しさん
05/09/15 14:31:54
>>938
f2()のプロトタイプ宣言が必要っぽい。

942:デフォルトの名無しさん
05/09/15 16:28:36
Incompatibilities Between ISO C and ISO C++, David R. Tribble

URLリンク(david.tribble.com)
・ Implicit function declarations

> C++ does not allow implicit function declarations. It is invalid to call a function
> that does not have a previous declaration in scope.
>
> C99 no longer allows functions to be implicitly declared.
> The code above is invalid in both C99 and C++.


943:デフォルトの名無しさん
05/09/15 17:47:26
>>936
標準の (14.6.4.2/1) をそのまま読む限りでは, unqualified name lookup として
解決される名前は point of definition の文脈のみが考慮されて,
associated namespaces を用いた名前解決(要するにADL)では,point of definitionと
point of instantiation の双方の文脈が考慮されるみたいですね.なので,

>>936 の f1(1) という呼び出しにおける f1 中の f2(t) に対する名前解決の場合,
unqualified name lookup では f2 の呼び出しを定義している場所(point of definition)
からは f2 という名前は解決されないので失敗し,さらに f2(t) は int を引数とした
呼び出しのために associated sets of namespaces and classes も空 (3.4.2/2) の
ため,ADL 経由でも f2 は見つからずに,結果 f2(t) という関数呼び出しに対応する
名前の解決が失敗する.

一方で,>>938 の f1(a()) 及び f1(adl::a()) という呼び出しにおける f1 中の f2(t)
に対する名前解決の場合,>>936 と同様 unqualified name lookup による名前解決は
失敗する.ところが,a 及び adl::a はユーザ定義型で,各々グローバルと adl が
associated namespace になる.この場合,f2(t) という呼び出しが定義されている
場所 (point of definition) と f1 がインスタンス化された場所
(point of instantiation) 双方の文脈が名前解決において考慮される.結果,
point of instantiation の文脈で void f2(a) と void adl::f2(adl::a) が
visible のため,これらの名前解決が成功する.

と,こういう感じだと思います.ちなみに VC++7.1 の挙動は,dependent name だろうが
non-dependent name だろうが,ADL 経由だろうがなかろうが,全て
point of instantiation の文脈も考慮するという実装になっているための結果で,
これは標準に準拠した挙動ではないです.

944:943
05/09/15 17:49:27
あ,すいません.長々と書きましたけれど結論としては,
936のコードは(標準に準拠していないという意味で)正しくないと思います.

945:936
05/09/15 22:07:49
>>943
なるほど。
実体化の時点で名前の解決を行っても、
実体化の時点の文脈が考慮されるとは限らないんですね。

皆様、ありがとうございました。

946:デフォルトの名無しさん
05/09/15 22:41:25
template<class T>
class Foo {
 public:
    ...;
 private:
    class Bar { 
    public:
        ...;
        bool operator()(const Bar& l, const Bar&r) const;
    private:
        T m_value; 
        int misc_info;
    };
    
    std::multiset<Bar, Bar::Comp> m_bars;
};

m_bars の先頭・末尾に番人(misc_value などは他のメ
ンバと同様にアクセス可能にしたもの)を導入したいの
ですが、どういうアプローチで作れば良いでしょうか?


947:デフォルトの名無しさん
05/09/16 01:33:46
>>946 undeclared identifier `misc_value'

948:デフォルトの名無しさん
05/09/16 09:43:59
>>946
テンプレート関係ないやん。

949:デフォルトの名無しさん
05/09/18 16:56:08
STLportではコンパイルできるけれど、
g++のSTLではエラーが出てしまうようなコードってどんなものがあるでしょうか?
vectorやstringくらいしか使ってないんですが、コンパイルでエラーが出ます。。

950:デフォルトの名無しさん
05/09/18 17:25:59
エラーメッセージ書かん奴には答えない

951:デフォルトの名無しさん
05/09/18 17:33:35
>>949
氏ね!

952:デフォルトの名無しさん
05/10/05 16:55:29
template<int num, int count> struct power{ enum { value = power<num, count-1>::value * num }; };
template<int num> struct power<num, 1>{ enum { value = num }; };
template<int num> struct power<num, 0>{ enum { value = 0 }; };
template<> struct power<0, 0>{ enum { value = 0 }; };
       ∋oノハヽo∈
         ( ´ⅴ`) <テンプレート ♪ で、計算♪計算♪  age♪ age♪
          (つ┳9
         (_)┃_)
          ━§━
            §
   ⌒ヽ〃⌒ヽ〃    
int main()
{ //2の8乗
cout << power<2, 8>::value << endl;
return 0;
}


953:デフォルトの名無しさん
05/10/05 18:45:40
>template<int num> struct power<num, 0>{ enum { value = 0 }; };

それはどうかと思うぞ。

954:デフォルトの名無しさん
05/10/05 19:02:12
template<int num> struct power<num, 0>{ enum { value = 1 };};

955:デフォルトの名無しさん
05/10/05 19:13:50
<0,0>,<num,1>の特殊化は必要ないな

956:デフォルトの名無しさん
05/10/05 21:12:57
むしろこうしてコンパイル時エラーにしろよ。
template<> struct power<0, 0>{};

957:デフォルトの名無しさん
05/10/05 21:24:22
0^0って数学的にはどうなるの?

958:ヽ(´ー`)ノ ◆.ogCuANUcE
05/10/05 22:22:38
>>956
n^0 = 1


959:ヽ(´ー`)ノ ◆.ogCuANUcE
05/10/05 22:23:20
スマン。レス番間違えた orz

960:デフォルトの名無しさん
05/10/05 22:28:09
>>957-958
一方で0 ^ n = 0となっているから問題になる。
ところで^と言えばXORの立場が。

961:デフォルトの名無しさん
05/10/06 12:22:20
VC6のtemplate関数ってバグある気がするんだけど...
template<typename T> void test();
引数無し呼んだときに解決できてないみたい...
template<typename T> void test(const T&);
みたいにすればオーバーロードで解決できるのか、大丈夫みたいなんだが...


962:デフォルトの名無しさん
05/10/06 12:36:11
いまどきそんな化石コンパイラに文句言われても…

963:デフォルトの名無しさん
05/10/06 13:39:14
化石以前にtemplateに関しては欠陥コンパイラですから・・・

964:デフォルトの名無しさん
05/10/06 17:42:46
そもそもC++コンパイラじゃないですから

965:デフォルトの名無しさん
05/10/06 22:25:31
少なくともANSI/ISO C++準拠とは言えないな。

966:デフォルトの名無しさん
05/10/07 04:44:36
じゃーVC7はどうですか?

967:デフォルトの名無しさん
05/10/07 05:23:27
7.1はかなりまとも。

968:デフォルトの名無しさん
05/10/07 12:23:52
7と7.1は全然違うぞ
7はかなり微妙

969:デフォルトの名無しさん
05/10/07 13:11:10
7はCStringにバグがあったね。STL周りもちょっと不安定なところがあった気もする。

970:デフォルトの名無しさん
05/10/07 14:50:27
7.1って具体的にclのどのバージョン?


Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
っての使ってるけど

971:デフォルトの名無しさん
05/10/07 15:06:35
VS.net(VC.net)2003か、VCTK2003のやつが7.1
13.10.3077なら7.1だな。VS.net2003の方のやつだろ。

972:デフォルトの名無しさん
05/10/14 17:36:27
codeguruに記事の投稿してみたがレビュー通んないとだめなんだね


973:デフォルトの名無しさん
05/10/18 15:57:25
age

974:デフォルトの名無しさん
05/10/26 22:29:10
人稲杉なので、バカネタを投下。
URLリンク(www.hakusi.com)

Boost.Lambda みたいに Expression Template を使った、引数に対して安全なフォーマットライブラリ。
Boost.Function や、Boost.Bind と組み合わせることが可能。
以前作成したものと違い、オマケ機能だが入力も可能で、ワイド文字にも対応。

ただ、 _ と % だらけで見た目がキモイ上に、実用性がイマイチ謎。
Expression Template の資料として。

// 出力
 string strA, strB;
 sprint( strA, "1 " % !_x[6] % "/" % _s, 10, "aaaa" ); // sprintf( str, "%#6x/%s", 10, "aaaa" ); みたいな。
 sprint( strB, "2 " % (!_x[6]*='0') % "/" %_s, 10, "aaaa" ); // sprintf( str, "%#06x", 10, "aaaa" ); みたいな。
 cout << strA << endl; // 1 0xa/aaaa と出力
 cout << strB << endl; // 2 0x000a/aaaa と出力
// 入力
 int xA, xB;
 string yA, yB;
 sscan( strA, "1 " % _ws % _x % "/" % _s, xA, yA ); // 空白部分はスキップさせる
 sscan( strB, "2 " % _x % "/" % _s[3], xB, yB ); // 文字列部分は3文字のみ取得
 // 出力
 print( cout, "xA = " % _d % "\nyA = " % _s % _endl, xA, yA );
 print( cout, "xB = " % _d % "\nyB = " % _s % _endl, xB, yB );
 // xA = 10
 // yA = aaaa
 // xB = 10
 // yB = aaa と出力

975:デフォルトの名無しさん
05/10/27 00:15:14
>>974
せっかくなので便乗しておきますね.将来の話なのでアレですけれど.

URLリンク(www.open-std.org)

976:デフォルトの名無しさん
05/10/29 10:05:49
難読コンテスト会場はここですか?

977:デフォルトの名無しさん
05/10/31 13:08:43
>>974
すげー--w
確かに scanf っぽいこと出来るし。

でも、Perl みたいで汚いな。使おうとは思わんけど。

978:デフォルトの名無しさん
05/10/31 13:59:50
>>974
マジキモス

979:デフォルトの名無しさん
05/11/02 14:02:41
>>974
良くこんなん書く気になるなあ。

980:デフォルトの名無しさん
05/11/02 14:40:35
>>975
boostな人達はあれば便利だけど、一般人的にはどうなのかなあ?

981:デフォルトの名無しさん
05/11/02 16:19:39
>>980
どの辺が便利なのか理解に苦しむ。

982:デフォルトの名無しさん
05/11/03 13:49:05
>>980
型安全な printf, scanf というのが一番インパクトが大きいと思います.
後,lambda のような(擬似的な)可変長テンプレート引数を使ったライブラリの
コンパイル時メッセージが見やすくなるというのもあるかと.

>>981
Boost な人にとっては,これまでプリプロセッサなどで力技で実装していた
Function, Tuple, MPL, Lambda など多くのライブラリの実装が
非常に楽に見通しよく実装できるようになり,便利になると思います.

983:デフォルトの名無しさん
05/11/03 15:15:01
>>982
コンパイルエラーなどたいして問題じゃないけどね。
それよりもデバッグの方が大変。

984:デフォルトの名無しさん
05/11/03 15:19:33
変な拡張するより単にプリプロセッサを名前空間対応にすればいいだけちがうの?


985:デフォルトの名無しさん
05/11/03 15:30:42
>>984
それじゃプリプロセッサにならないでしょ。

986:デフォルトの名無しさん
05/11/03 17:19:51
え、C/C++のプリプロセッサってトークン理解してるはずなんだけどなあ。
商用じゃプリプロセスと同時に解析するのが主流だし。
テンプレート引数程度の局所的変更じゃ根本的解決にならないでしょ。

987:デフォルトの名無しさん
05/11/03 17:26:54
名前空間を通常のものとプリプロセッサで共有しようとすると
泥沼になる気がする。(例えば
# define STD_BEGIN namespace std{
とか)
pp専用の名前空間ならwaveが実験的に対応している。

988:デフォルトの名無しさん
05/11/03 22:37:23
プリプロセッサと言えば、C++/CLIでとんちきな拡張してるよ。
スペース区切りキーワードってやつ。
URLリンク(www.microsoft.com)

989:デフォルトの名無しさん
05/11/04 00:29:44
プリプロセッサと本体の間のフォーマットってANSIか何かで標準規格ある?
#132 "hogehote.h"
たいていはこんなの出るんだよね?

990:デフォルトの名無しさん
05/11/04 01:08:57
次スレ立てて良いですか?

991:デフォルトの名無しさん
05/11/04 01:21:16
C++相談室で十分だと思うんだ。

992:デフォルトの名無しさん
05/11/04 01:32:58
ハゲドー
一年もかかってやっと1スレなペースだし

993:デフォルトの名無しさん
05/11/04 01:40:20
>>983
> コンパイルエラーなどたいして問題じゃないけどね。

断言君さようなら


994:デフォルトの名無しさん
05/11/04 11:26:29
断言君だって。なにその俺様用語w

オナニーマクロだらけの糞コード書いてる奴は
日本語にもそれが出るね。

995:デフォルトの名無しさん
05/11/04 12:12:24
断言君 の検索結果 約 926,000 件中 1 - 10 件目 (0.27 秒)

996:デフォルトの名無しさん
05/11/04 12:25:58
俺も>>983を支持する。
ランタイムエラーが恐ろしいのであって、
コンパイルエラーなどコンパイラとの対話交渉に過ぎない。

997:デフォルトの名無しさん
05/11/04 13:14:27
てかさ、コンパイルエラーが出てたら、
そもそも実行ファイルはビルドされて無いんじゃないか?
ワーニングなら分かるけど。

998:デフォルトの名無しさん
05/11/04 13:49:38
つぎスレ立てるかどうか迷っているんだが
このスレのタイトルをよく吟味したら

「統合」:いくつかの物を一つにまとめあわせること

このように辞書では出ている。
つーことは「STL相談室」も「BOOSTを語れ」も入らないよーな気がした。
それとも、ここのつぎスレが要らないのか?
そんな疑問を抱いてしまって、俺には次スレを立てる勇気がない。
さあ。次をたてる勇者はだれか。

999:デフォルトの名無しさん
05/11/04 13:53:56
boostは微妙だがSTLスレもこのスレも必要なし
あっても混乱するだけ


1000:デフォルトの名無しさん
05/11/04 14:02:28
STLを使うと実行ファイルのサイズが10倍になるから
スレは統合すべきだと思います。

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch