[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 01/02 08:18 / Filesize : 209 KB / Number-of Response : 862
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part62



1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

710 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:06:44 ]
>>708
_alloca()ならVC++でも普通に使えるよ

711 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:50:21 ]
こんなこともallocaと
って一度言ってみたいです

712 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 22:03:10 ]

         |:;:;:;:;:;:;:;:;:;:;:;:;:;:i;:;:;:;:;:;:;:;:;:;:;:;:;|
           |;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
        |______|_____|
        | 三|  _     _   |三 !
        | 三|  三シ   ヾ三  |三 |
        | 三′  .._     _,,..  i三 |
        ト、ニ| <でiンヽ  ;'i"ィでiン |三.|
        ', iヽ!  、 ‐' /  !、 ーシ |シ,イ
         i,ヽリ    ,' :  !.     |f ノ
         ヾ!    i ,、 ,..、ヽ   lノ
          |      _ _    イ l       malloca
            l    ,ィチ‐-‐ヽ  i /、
             ゙i、   ゝ、二フ′ ノ/'"\
              | \  ー一 / /   _,ン'゙\
          ,ィ|、  \     /_,、-'" _,.-''´ `丶、__
       _, イ  | ヽ_ 二=''" _,. -''´  """""´´  ``ー



713 名前:デフォルトの名無しさん [2008/07/10(木) 22:19:03 ]
alloca は gcc の configure でもチェックあるよな

714 名前:デフォルトの名無しさん [2008/07/10(木) 22:20:10 ]
> バカのやることだぞ

まだそんなカキコしてるんですか? にっぽんのドクターさん

715 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:11:49 ]
プログラム=PCアプリだと思ってる連中は気楽でいいのう・・

716 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:15:46 ]
どう気楽なのかキッチリ説明してもらおう。  (と言ってみる

717 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:06:24 ]
C99は無かったことにならないかな。下手にこんなのがあると、コンパイラ
ベンダーが、C99実装しかねない。

718 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:13:54 ]
たいていのコンパイラベンダはC++を優先するだろ

sizeofがコンパイル時定数にならないとか悪夢過ぎるだろ



719 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:51:13 ]
・conio.hを何とかして欲しい。
・stdint.hの声が何故大きくない?

720 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:58:56 ]
それにしてもC++自体が変態化してきて誰にも使われなくなりそうな気がするのは俺だけだろうか

721 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:06:43 ]
おれのVC++のソース、alloca普通に便利に使ってる

722 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:26:23 ]
C++はいろいろ変な部分があるが、
代わりになるいい言語がないのも事実
web限定とかだとPerl系に軍配が上がるが

723 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:40:53 ]
C++0xはC99みたいな立場になるだろうな
そして代わりに○○が台頭する

○○にはお好きな言語をどうぞ

724 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:55:57 ]
Obj-C

725 名前:デフォルトの名無しさん [2008/07/11(金) 01:58:45 ]
アプリケーション(ダイアログ)に表示された文字を外のアプリケーションから取得する方法ご存知のかたいませんか?


726 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:01:16 ]
D言語がいつか主流になる・・・
そんな風に考えていた時期がありました・・・

727 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:20:56 ]
>>725
君がすれ違いだということだけは、はっきりわかる。
プラットフォームすら記載されてないので、どのすれが適当かはしらん。

728 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 03:03:54 ]
>>726
今ひとつ流行らんよなアレ



729 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 04:15:06 ]
>>728
だってDは、「言語仕様が確定=開発終了」だもん。
D1の仕様は決まったけど、D2のほうが進歩してるのに誰がつかうよ。

730 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 12:54:57 ]
仕様と同時に実装が下りてくるってのもエキサイティングだとは思うがね
なんにせよ俺は指をくわえて見てるだけ

731 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 02:55:05 ]
無名namespaceについて教えてください。

名前のある名前空間の場合、
namespace hoge{
void f();
}
というように宣言して、後で
void hoge::f(){}
のように定義できますが、名前無しの場合
namespace{
void f();
}
として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
もちろん定義のときも
namespace{
}で囲ってやればいいのでしょうが、関数定義のような長いものをブラケットで
囲むというのも、邪魔くさいなぁと思い。


732 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:05:35 ]
確かに邪魔くさいが、
だからこそそんなもの使わないですむようしておけって話じゃね?

733 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:08:33 ]
>>731
>として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
こういう参照が出来ないからこそ役に立つんだと思う

734 名前:731 mailto:sage [2008/07/12(土) 03:15:56 ]
レスどうもです。

基本的に、C++では翻訳単位内でのみ使用する変数や関数は、C言語のような
staticを付けるのではなく、無名名前空間を推奨しているようですが、
そうなると関数の定義は
namespace{
void f() { }
}
のようにするということでしょうか。みんなそうしてるのかな。

735 名前:732 mailto:sage [2008/07/12(土) 03:27:22 ]
ごめん。 もっとくだらない理由だと思ってた。

"翻訳単位内でしか使わない"っていうことを明示したいなら、
その邪魔くさいnamespaseが(目立つから)役に立つだろうし、
邪魔くさいnamespaseを使いたくないってことは、
"翻訳単位内でしか使わない"っていうことを明示しなくてかまわない
と、俺は思うけど。

本当に邪魔だと思うなら、翻訳単位内でしか使わないとか、あきらめなよ。

736 名前:731 mailto:sage [2008/07/12(土) 03:51:39 ]
外部リンケージを持たせたくない変数や関数の宣言だけを
namespace{}に収めるところまでは、目立たせる意味でも
一覧という意味でも非常にスッキリしてると思うんですよね。
ただ、ここに関数のボディまで書いてしまうと、一望しづらくなるので
別途書くことになるのですが、関数定義をブラケットで囲むということに
少し拒否反応がでてしまった次第です。ただ、これしか方法がないなら
そうするしかないですね。邪魔だから使わないというわけにもいかない
機能ですし。あとは、関数定義1つ1つをnamespace{]で囲むのか、複数の
関数定義をまとめてnamespace[]で囲むのか、こだわれるところとしたら
そのくらいですか。



737 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 04:02:32 ]
すごい余談だけど、目立たせなくてはいけないのは、関数本体だと思うんだ。
関数本体をメンテナンスするとき、どの関数に使用されているかが問題になるので。

宣言が目立たないと、間違って呼び出そうとしてリンクエラーでるじゃん? それもいやじゃん?
ていわれりゃそうなんだけどさ。

738 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:09:05 ]
templateで、doubleとfloatだけしか使えないようにするには、
何か書き方があるのでしょうか。教えてください。
template<typename T> void hoge(T arg);



739 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:30:51 ]
template<typename T> void hoge(T arg){return;}
void hoge(double arg);
void hoge(float arg);

740 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:33:12 ]
>>738
template<typename T> struct hoge_chk{hoge_chk(){ use_float_or_double(); }};
template<> struct hoge_chk<float>{};
template<> struct hoge_chk<double>{};

template<typename T> void hoge(T arg){
   hoge_chk<T>();
   ...
}

741 名前:740 mailto:sage [2008/07/12(土) 08:35:10 ]
use_float_or_double()は定義されていない前提ね。
コンパイルエラーにさせるため。

742 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:39:49 ]
template<typename T> void hoge(T arg);
template<> void hoge(float arg) { }
template<> void hoge(double arg) { }

でいいじゃん。

743 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:44:11 ]
>>739 >>742
それだと
void hoge(float arg) {}
void hoge(double arg) {}
と同じだし、それぞれ実装書かないといけないから
テンプレート関数にする意味無いだろw

744 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:45:47 ]
template<typename T> void hoge_impl(T arg) {}

template<typename T> void hoge(T arg);
template<> void hoge(float arg) { hoge_impl(arg); }
template<> void hoge(double arg) { hoge_impl(arg); }

745 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:52:53 ]
>>743
同じじゃねーよ。そのコードでhoge("hogehoge")はエラーだけど>>739>>742はエラーじゃない。
テンプレートにする意味がないっていうのは質問者に言えって。

746 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:55:57 ]
>>745
いや、hoge("hogehoge")で>>742はエラーになるよ。

747 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:56:00 ]
>>744
だから下のテンプレート関数は意味無いってw
それでやるならこうだろ
template<typename T> void hoge_impl(T arg) {}
inline void hoge(float arg) { hoge_impl(arg); }
inline void hoge(double arg) { hoge_impl(arg); }

748 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:59:00 ]
質問者がdoubleとfloatだけしか使えないように、と言ってるので
使えてしまう>>739も駄目だな



749 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:04:54 ]
>>745
>テンプレートにする意味がないっていうのは質問者に言えって。
>>740>>747はテンプレートにする意味あると思うけど。

750 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:16:21 ]
>>747
テンプレートの特殊化は関数の多重定義に優先するから
意味が違う

751 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:21:25 ]
>>750
意味分かって言ってる?
それで困る「まともな状況」書いてみ

752 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:22:41 ]
テンプレートの特殊化と関数の多重定義を二つかくと
関数の多重定義の方が無視されるだろ

753 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:25:48 ]
>>752
>テンプレートの特殊化と関数の多重定義を二つかくと
それがまともな状況じゃないって言ってるんだよw

754 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:26:34 ]
>>753
メンテナンスの程度次第ではいくらでもあり得る。
まともかまともな状況じゃないかはお前が判断する事じゃない。

755 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:27:36 ]
>テンプレートの特殊化と関数の多重定義を二つかくと
>関数の多重定義の方が無視されるだろ

これ逆だよ。関数の多重定義の方が優先される。
だからテンプレートの特殊化と関数の多重定義は混ぜて
書くべきじゃない。

756 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:31:38 ]
>>754
ワロタwどんな糞メンテナンスだよw

757 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 12:06:44 ]
あれ?オーバーロードの方が特殊化より優先するよな?

758 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 12:52:15 ]
>>757
>>755



759 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 12:38:07 ]
boostスレ過疎ってんな・・・w

760 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:14:51 ]
このスレ過疎ってるのでしょうか?
この話題↓で盛り上げてください!

やねう企画代表者やねうらお(本名・磯崎元洋)が
・ソフトウェアの不正コピーを行っていた
・労働契約上の違反をしていた
・他は不正コピーしていないことを証明しようとしてエロゲーのパッケージを発見し、
 写真に撮ってアップロードしようとした。
d.hatena.ne.jp/pmoky/19000106
やねう企画の裏側(競馬の詐欺ソフトの製作現場)
d.hatena.ne.jp/pmoky/20060510
d.hatena.ne.jp/pmoky/20060511
d.hatena.ne.jp/pmoky/20060512
有限会社やねう企画(所在地・大阪府八尾市末広町2−1−2)が計画倒産
www.sia.go.jp/~osaka/zenso/19.09.pdf

やねうらおプロフィール
性格:友達から「チンピラ」「ヤクザ」と呼ばれている。前世で殺人鬼だった宿業を背負っているという妄想(自覚)あり。
最終学歴:専門学校卒
主な職歴:有限会社センキ(凌辱系アダルトゲームの製作会社)を経て独立、有限会社やねう企画を設立、2006年に計画倒産
代表作:『夜這いマニア』『盗撮マニア』『お楽しみCDシリーズ』『競馬詐欺ソフト』『BM98』

やねうらお語録
>「ワシのほうが潔癖やと思うんやけどな。
>絶対に違法コピーのソフトしか使わんし。
>たとえば強盗に入ったときに、ちょっとかわいそうになって
>十万円だけ残してったら、おかしいやろ?
>自分の『強盗する』という意思に対して矛盾やろ?
>だからワシは、一個も買ったソフトを使ったことがない!!」


761 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:18:26 ]
759 :デフォルトの名無しさん [sage] :2008/07/13(日) 12:38:07
  boostスレ過疎ってんな・・・w

760 :デフォルトの名無しさん [sage] :2008/07/13(日) 13:14:51
  このスレ過疎ってるのでしょうか?


日本語が不自由のようだなw

762 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 14:27:07 ]
キーワードによる自動コピペ

763 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 14:49:07 ]
memset や memcpy の動作について質問です。

memset(buff, 0, 0); や memcpy(buff, work, 0);

764 名前:763 mailto:sage [2008/07/13(日) 14:50:35 ]
すみません、途中で送信してしまいました。


memset(buff, 0, 0); や memcpy(buff, work, 0); のように
サイズが 0 の場合、何も行われないという認識で合っていますか?
MSDN では分らなかったです。

765 名前:デフォルトの名無しさん [2008/07/13(日) 15:06:56 ]
サイズ 0 ならガッされないなんて知ってても役に立たんだろ

766 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:09:41 ]
>>764
そういう場合、不安だったらmy_memsetかなんか一個かましておけ

767 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:12:29 ]
>>765
関数の呼び出し元にバッファ領域のポインタと領域サイズを渡させる場合に役に立ちます
memset や memcpy にサイズ 0 を渡しても大丈夫ということであれば、
領域サイズに 0 が指定された場合のエラーチェックをせずに済むケースがあるからです

768 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:25:06 ]
規格書にはn文字ほげほげするとだけしか書かれてなかった希ガス。
詳しく知りたければJISのサイトでX3010を検索。



769 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:25:19 ]
>Where an argument declared as size_t n specifies the length of the array for a
>function, n can have the value zero on a call to that function. Unless explicitly stated
>otherwise in the description of a particular function in this subclause, pointer arguments
>on such a call shall still have valid values, as described in 7.1.4. On such a call, a
>function that locates a character finds no occurrence, a function that compares two
>character sequences returns zero, and a function that copies characters copies zero
>characters.

0を渡すことはできるが、その場合でもNULLはダメらしい

770 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:44:01 ]
>>766
なるほど、それは確かに賢いやり方ですね。
ちょっと考えてみます。

>>768
調べてみます。

>>769
NULL チェックだけは避けられないということですね。
やはり、エラーをチェックする自作関数をかました方が良いのかもしれないですね。

771 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 18:18:24 ]
宣言と定義が別々になってるコンストラクタで、初期化リスト使う場合って
宣言と定義両方に初期化リストつけなきゃいけないんだっけ?

772 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 18:20:42 ]
定義の方だけ
class A {
int a;
A();
};
A::A():a(0){}

773 名前:771 mailto:sage [2008/07/13(日) 18:25:33 ]
ありがとう。

774 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:20:26 ]
=== hoge.h ===
class hoge {
public:
 template<typename T> T func(T a) const;
};
=== hoge.cxx ===
#include "hoge.h"
template<typename T>
T hoge::func(T a) const {
 return a;
}
=== main.cxx ===
#include "hoge.h"
int main() {
 hoge h;
 int a;
 h.func(a);
 return 0;
}

775 名前:774 mailto:sage [2008/07/14(月) 05:22:22 ]
GCC 4.0.1で、
$ g++ -c hoge.cxx -o hoge.o
$ g++ -c main.cxx -o main.o
$ g++ main.o hoge.o -o main
Undefined symbols:
"int hoge::func<int>(int) const", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

となってしまいます。
templateのメンバ関数というのは、これではまずいですか?


776 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:41:04 ]
まずいです。
h.func(a); を書いたソースから hoge::func の実装が見えるようにして下さい。
ようするに hoge.h に実装を書いてください。

777 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:50:17 ]
>>775
exportキーワードをサポートしてないC++処理系では無理

778 名前:774 mailto:sage [2008/07/14(月) 06:14:12 ]
>>776-777
まじですか。なんともめんどくさい。
設計からやり直さないと。
ありがとうございました。



779 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:11:37 ]
VC++ 2008はもうexportをサポートしてる?

780 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:14:37 ]
ネイティブコードなんてシロモノはOSぐらいしか使わないような世界になったなら、
exportもサポートされるかもな。

781 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:19:25 ]
じゃあ2008でも未サポート?

782 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:57:28 ]
>>780
なんで?

783 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:23:50 ]
今やオブジェクト間最適化が当然の如く行なわれている。
export実装がそんなに困難であるはずがない。

784 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:29:47 ]
コードレベルで保持しないとダメだから難しいでしょ。

D言語はうまいことやってるけど。

785 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:31:36 ]
そろそろVC++2008でexportが実装されてるか教えてくれてもいいだろう

786 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:33:17 ]
>>785
それがないんだな。

787 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:39:11 ]
うそ〜ん

788 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:49:19 ]
exportが実装されるまでvcはスルー確定だな



789 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 01:19:30 ]
じゃ、どのコンパイラ使う気?

790 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 01:23:38 ]
Cマガってもう再開しないのかな。

791 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 01:25:14 ]
exportはおまえらが想像する程素敵じゃないのよとEffectiveC++3版にかいてあるよ

792 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 01:28:06 ]
Comeau

793 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 08:20:16 ]
ところでMore Effective C++が第2版になっても訳が最悪で読みづらいらしいが
実際どうなの?読む価値ナッシングぅ?

794 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 21:27:54 ]
>>793
読解可能なら原書を。
そうでないなら、項目を中心に辞書的に活用。

読む本としては厳しい。


795 名前:デフォルトの名無しさん [2008/07/15(火) 22:33:14 ]
「訳が最悪」という論評は原著が熟読できていて初めて可能
そうでなければ他人の論評の受け売り

796 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 22:36:38 ]
日本語版しか読んでないけど、読みにくいのは確か

797 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 22:47:18 ]
2つの補い合う16ビット整数について学べる本だと聞いたのだが本当かな?

798 名前:デフォルトの名無しさん [2008/07/15(火) 23:37:13 ]
原著が糞かどうかは見えていないわけか



799 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 02:18:51 ]
>>793
新訂版は知らんが、旧版についてなら>>794でFAだと思う。
はっきり誤訳とわかる箇所が散見される
(例:p.139 コンストラクターメンバ関数 → 例示コードでconstメンバ関数とわかる)、
一般的な訳語を使わない(例:省略時コンストラクター)などの問題がある。
訳者まえがきに「翻訳を急いだ」と書いてあるが、そういう問題かなという感じ。

ttp://www.pej-hed.jp/washo/38.html に新訂版の目次があるけど、
少なくとも訳語の問題はあまり変わっていないようす。
訳者は旧版の3人+新任1人なので、自分は読み直す気にはならない。


800 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 02:39:21 ]
800ならC++滅亡

801 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 02:56:32 ]
>訳者は旧版の3人+新任1人なので
懲りてないな。
トールキンで言うと戸田&山本の最凶タッグが成立するようなもんか。

802 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 14:34:49 ]
省略時ナントカは JIS X3014 の術語だからなんとも言えないけど
const → コンストラクタ は酷いな… orz
C++使わない人が訳したんだろうね。

803 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 21:09:25 ]
テンプレートを用いる際、引数として与えられた型があるコンセプトを満たすかどうかによって、
異なるテンプレートを用いることはできるでしょうか?

例えば、
template<typename T>
class foo
{
 //Tがコンテナの要件を満たしてなければこの実装
};
template<typename T>
class foo
{
 //Tがコンテナの要件を満たしていればこの実装
};
という感じのコードを書きたいと思っていますが、
やはりredefinition of 'class foo<T>'と怒られます。
上手く解決する方法はありますか?

804 名前:803 [2008/07/16(水) 21:17:36 ]
ちなみに、解決方法は多少技巧的になっても構いません。

805 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 21:38:26 ]
>>803
特殊化すればよろし

template< typename T, bool is_container >
class foo
{ /* コンテナ以外 */ };

template< typename T >
class foo< T, true >
{ /* コンテナの場合 */ };

is_container を自動的に判定するにはメタ関数を作る必要がある


806 名前:デフォルトの名無しさん [2008/07/16(水) 21:41:40 ]
CLIで関数ポインタ配列の宣言がどうしても通らないんです。
よかったら教えてください。

public ref class Form1 : public System::Windows::Forms::Form
{
public:
...
int fn1(int,int);
int fn2(int,int);
int fn3(int,int);
int (*fp[])(int,int){
fn1,
fn2,
fn3
};
...


関数ポインタの配列が作りたいのですが、error C4368がでます。

807 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 21:43:35 ]
>>806
C++/CLIは最早別の言語なので、専用スレへどうぞ。

808 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 21:45:11 ]
>>803
これくらいなら出来る

#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_integral.hpp>

using namespace boost;

template<class T>
struct Y {};

template<class T>
struct Z {};

template<class T>
struct X {
typedef mpl::if_<is_integral<T>, Y<T>, Z<T> >::type type;
};




809 名前:デフォルトの名無しさん [2008/07/16(水) 21:46:08 ]
>>805
ありがとうございます。
そのメタ関数の作り方を教えていただけないでしょうか?
あるいは、そのようなテンプレートプログラミングについて解説してあるサイトを紹介してくださると助かります。

810 名前:デフォルトの名無しさん [2008/07/16(水) 21:46:10 ]
>807
すみません。移動します。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<209KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef