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


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

C++相談室 part111



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

前スレ
C++相談室 part110
toro.2ch.net/test/read.cgi/tech/1389620885/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.89【環境依存OK】
toro.2ch.net/test/read.cgi/tech/1390171944/

次期規格C++1yはこちら
C++14/C++1y
toro.2ch.net/test/read.cgi/tech/1382889622/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

【重要】
hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。

856 名前:デフォルトの名無しさん [2014/03/29(土) 18:29:45.78 ID:dD6X7nCn.net]
構造体の配列を初期化したいのですが
↓ですと初期化子の数が多すぎるといったエラーになってしまいます。
 struct Hoge { int Piyo; };
 std::array<Hoge, 2> HogeArray = { { 123 }, { 456 } };
どのように記述すればよいでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 18:35:24.51 ID:dD6X7nCn.net]
すんません以下のようにしたら通りました。
 std::array<Hoge, 2> HogeArray = {{ { 123 }, { 456 } }};

858 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 18:37:09.12 ID:kK1JTf3+.net]
std::array<Hoge, 2> HogeArray = {{123,456}};でもいい

859 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:02:59.09 ID:AwSwPmzi.net]
そのバカくさい二重括弧はC++14で修正予定

860 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:47:58.21 ID:ukiMHmOI.net]
構造体の中に構造体があるのか

861 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 08:27:30.18 ID:VjU+6nmm.net]
そのバカくさい二重括弧を排除したら
struct {unsigned sz, ary[100];};
struxt {unsigned ary[100], sz;}; ← この初期化が面倒じゃん
実際は従来記法もそのまま使えるんだろうけどさ

862 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 11:35:04.42 ID:VZDaHlzY.net]
>>856
心配すんな
排除されることはない

863 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 13:53:57.58 ID:6aZDF4w4.net]
C++のプロの人、お知恵をお貸しください

T** m_W;
T func(int y, int x);

void setW() {
for(int y=0 ; y<m_height ; ++y) {
for(int x=0 ; x<m_width ; ++x) {
m_W[y][x] = func(y,x);
}
}
}

のような関数のうち、Tを返すfuncの部分をラムダ式を突っ込めるようなテンプレートにしたいのです。

template<typename T> void setW(??? func) {
for(int y=0 ; y<m_height ; ++y) {
for(int x=0 ; x<m_width ; ++x) {
m_W[y][x] = func(y,x);
}
}
}

という感じになると思うのですが
T型を返すことを強制した関数オブジェクト(?)を指示するためには
???部の型として何を指定するのが適切なのでしょうか?

864 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:10:06.25 ID:mx5qZxk6.net]
>>858
引数がint型2個と決まっているなら std::function<T(int,int)>



865 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:25:02.49 ID:0Wbn/Mof.net]
>>858
T型を返すってのをどの程度強くことを強制したいかだけど、
m_W[y][x]に代入できればそれでいいような気がする。

template<typename F> void setW(F func);
でいいのでは?

866 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 14:48:37.61 ID:6aZDF4w4.net]
>>859
はい。引数2個限定で問題ありません。
std::functionというので指定するのですね。
勉強になりました。ありがとうございます。

>>860
ありがとうございます。
今回は引数2個限定で良かったので、859さんの方法で良かったのですが
引数の数が変わってくるような場合には便利そうです。
別の機会に使っていこうと思います。

867 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 15:12:09.92 ID:w88t0C6o.net]
functionはポリモーフィックtype-eraseするときに使うものだろ。
この場合template<typename T, typename lambda_t> void setW(lambda_t func);
とするべきでは

868 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 15:17:52.06 ID:mx5qZxk6.net]
>>862
> functionはポリモーフィックtype-eraseするときに使うもの
そうとも限らないと思うけど、この例も一種のtype erasureだよ。
継承関係に関わらず特定のインターフェースを備えた型はなんでも受け入れられるんだから。

869 名前:862 mailto:sage [2014/03/30(日) 16:22:05.22 ID:w88t0C6o.net]
>>863
そだね
猿の勢いで脊髄反射したスマン。
Tを返すことを強制したいなら
result_ofを使えばいいと思ったけど、
呼び出し箇所の数だけテンプレートが
インスタンス化されたらたまらんか。

870 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 21:13:56.97 ID:ERqvs8f4.net]
三角関数の関数ポインタを作ろうと思い以下のようにしたのですが次のエラーがでました。

#include <math.h>
double (*myfunction[])(double) {sin, cos, tan};
エラー:関数定義のようですが、パラメーター リストがありません。外見上の本体をスキップします。

どこか根本的に間違っているのでしょうか?
パラメーターリストというのが良く分からないです

871 名前:デフォルトの名無しさん [2014/03/30(日) 21:28:23.54 ID:ktWAco2D.net]
(関数の)変数を定義して代入では

872 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 21:31:05.48 ID:oPW3xR3D.net]
>>865
double(*myfunction[])(double)={sin, cos, tan};

873 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/03/30(日) 21:37:45.66 ID:6C3OsSaD.net]
>>865
配列の初期化の書き方は注意が必要です。
ideone.com/Yive9q

874 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/03/30(日) 21:44:12.52 ID:6C3OsSaD.net]
あれ、そもそも何でコンパイル通らないんだ?
コムパイラーは何だろう
 Visual C++: OK
 G++:OK
 clang:OK



875 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:19:29.79 ID:6RO/tmV/.net]
もうC++を選択する理由がないんだよな、Windowsプログラミングでも
メモリ意識とかやってられないし、C#に完全に置き換わったよ

メモリオナニーしすぎだろC++えrって

876 名前:デフォルトの名無しさん [2014/03/30(日) 23:21:03.61 ID:TtK4Vlhp.net]
別にWindowsで仕事してないし

877 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:28:38.13 ID:6RO/tmV/.net]
ああ、Macってこと?なるほどね

なんの思想にかぶれちゃったのかね

878 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:30:56.06 ID:7KxU0paA.net]
何言ってんだコイツ?

879 名前:デフォルトの名無しさん [2014/03/30(日) 23:32:27.80 ID:TtK4Vlhp.net]
Mac(笑)

880 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:33:22.66 ID:qrMW5ntB.net]
一人だけレベルの低い奴いないかここw

881 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:34:08.27 ID:6RO/tmV/.net]
別にWindowsで仕事してないし の意味がちょっとわからなかったんだ
Windowsで仕事をしてるのか、Windowsアプリケーションを作る仕事しているのかね

前者の場合、言葉の意味を勘違いしてる輩かと思って、俺はMac派ですよみたいな思想
あーいう感じはちょっと受け入れられないね

882 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:40:44.70 ID:s2pjmqPg.net]
>>865
C++11にはイニシャライザリストってのがあるらしいんだけど、
それを使うように記述したのが>>865じゃないの?

883 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 23:41:22.91 ID://pyQIJP.net]
OpenVMSとVxWorksだから(棒
いやまあ、両OSでC++使えるようになって、かなり楽になったよ

884 名前:デフォルトの名無しさん [2014/03/30(日) 23:59:59.81 ID:VZDaHlzY.net]
>>876
Linux知らないの?



885 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:06:43.04 ID:4LHV21Ew.net]
C++ではMacが最強だろ。Clangと言えばMac。

886 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:07:16.15 ID:iPLvWewK.net]
>>870
きちんとしたドメインモデルを作ろうとしたらやっぱりC++では?

887 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:08:40.75 ID:JMzV2FUX.net]
MacはObjectiveCが何ちゃらと噂に聞くが

888 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:08:53.07 ID:YuwcCGee.net]
LinuxはCでしょ

889 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:31:25.16 ID:h/7kGidF.net]
c++代表Qt

890 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:51:35.78 ID:5uvxJF26.net]
>>881
そこはもうC#の方がやりやすい

891 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:59:35.85 ID:4LHV21Ew.net]
Winでは低脳・ゆとりの似非C++使いはMFC、真のC++使いはQtって感じになっているからな

892 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:01:48.52 ID:3ugtc2xG.net]
C++がモデル化に於いてC#やJava()より上な訳がないだろう
視野の狭くなった老人はここまでボケと妄想が激しいものなのか

893 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:39:04.83 ID:YuwcCGee.net]
んなことはないC#は洗練されている

ネットワークプログラミングするときはC++ではつまづく

894 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 02:09:05.98 ID:aH5oPSHV.net]
老害が無理してC++理解しようとすると決まって発狂するな



895 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 02:35:58.26 ID:h/7kGidF.net]
>>888
まさかC++ではsocket/winsockを使ってないよな

896 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 03:02:46.32 ID:JKT8WNOO.net]
asio使え、asio。そいでC++の迷宮を彷徨え

897 名前:デフォルトの名無しさん [2014/03/31(月) 04:59:04.83 ID:ftA6xnEH.net]
AsioはLinuxでうまく機能しない。
非同期プログラミングができるライブラリ全般がうまく機能しないと考えて
差し支えない。

898 名前:デフォルトの名無しさん [2014/03/31(月) 18:43:25.87 ID:yborCUTf.net]
今からC言語を勉強し始めるものですが、Visual Studioはどの年のものをインストールした方がよろしいでしょうか?

899 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:58:16.49 ID:FN8LC2rG.net]
>>893
最新いれとけ

900 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:16:22.59 ID:yborCUTf.net]
>>894
いれようとしたらWindowsが古いって言われました

901 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:17:48.49 ID:JMzV2FUX.net]
条件あとだしやめい

902 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:17:51.67 ID:NWhaiSr6.net]
>>895
まて、お前はまず Windows を新しくしなければならん
来週までにな

903 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/03/31(月) 19:23:16.60 ID:60O6Nh3u.net]
VS2008入れとけ

904 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:23:49.11 ID:yborCUTf.net]
近い内に買うと思う、XPだから
でも母次第です



905 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:29:36.88 ID:FN8LC2rG.net]
>>899
金が無いなら UbuntuかPC-BSDいれたら?
無料だしセキュリティもしっかりできるし。

コンパイラとか開発環境も全部無料でついてくるし
ツールやOSのソースコードも全部見えるから勉強にもなる。

906 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:31:26.73 ID:i99iYryZ.net]
VSでやりたいことがはっきりしてる場合は
そのやりたいことのサンプルとか参考になりそうなプロジェクトファイルを配布しているかどうかをしらべ
そのプロジェクトファイルのバージョンに合わせておくのが無難

907 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:35:25.75 ID:aH5oPSHV.net]
母親に頼んで買ってもらえ
アカデミックパックなら安く買えるだろ
学生の特権なんだし

908 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:42:13.49 ID:DtbGifhU.net]
>>900
Visual Studioのインストールごときにてこずるような初心者にそんなもの勧めるな
「来週以降ネットに繋ぐな」と言い渡して去るのが真の優しさ

909 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:57:11.33 ID:dwfvfwUS.net]
回路とか好きな引きこもりの義弟にVSあげたんだけど使ってくれてるかなあ
俺が電話変わってもらうと無言か切られるかだからわからん

910 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:01:36.02 ID:FN8LC2rG.net]
>>903
いや、このXPのドタバタの間にちょっとでもユーザー増やしたいなぁ・・・と

911 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:07:44.05 ID:JMzV2FUX.net]
正直Gnuのソースは読みにくい

912 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:09:20.82 ID:FN8LC2rG.net]
>>906
それは同意。
「公開せにゃならんやったら、せめて読みづらくしとこ」
って感じなのかと思うくらい酷いのあるね。

913 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:12:14.52 ID:JMzV2FUX.net]
前に勉強がてらコマンドのソースとかみようとしてやめた
関数名の前で改行とかいるのかね?

みるならFreeBSDのほうがきれい

914 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 21:00:34.11 ID:xTBmJi7C.net]
GNUはオープンにしてただで使えるだけで有難いと思え、乞食って感じだろ
欧米のプログラマはギブアンドテイクだけど(ギブが先)
でも、乞食(日本のドカタ)はテイク、テイク、ギブするのは文句だけだからな



915 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 21:47:43.53 ID:aH5oPSHV.net]
DTV板とか行くと文句たらたらのコジキしかいないよ
自炊が鉄則なのに文句だらけ

916 名前:デフォルトの名無しさん [2014/03/31(月) 21:50:33.54 ID:b96nnelI.net]
>>908
あの改行には神の見えざる何とかみたいな壮大な名前がついてて由来とかもあるんだよね。
全然興味なかったんで三秒で忘れちゃったけど。

917 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 22:43:13.46 ID:xTBmJi7C.net]
>>910
乞食、それは日本の美しい魂
そしてそれを行動にした、テイク、テイク、ギブするのは文句は日本の美しいおこないなのかもな

918 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 23:27:31.97 ID:JKT8WNOO.net]
どこぞのオプソ・プロプラのプロジェクトを
著作権違反しない程度にマネてオリジナル主張

919 名前:するのがGNU
全部とは言わないがGNU系のプロジェクトにオリジナリティなどほとんどない
[]
[ここ壊れてます]

920 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:02:08.41 ID:b5JB/Jhx.net]
いまやオリジナリティを有するものって日本発が多い
IT先進国の日本のものがパクられるのは仕方ない

921 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:39:10.72 ID:M/SUb6RV.net]
>>911
関数の宣言や呼び出しと、実装を分けることができるから
つまり)の直後が改行なら実装
古い時代の文化だけど

922 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:52:27.98 ID:0nwPuo2f.net]
消費税が上がるらしい

923 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 02:30:23.14 ID:SxmvLrt8.net]
>>916
エイプリルフール

924 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:14:35.48 ID:Xl1FJm59.net]
>>913
逆だ、GNU より先にめだったオプソがあったのか?BSD ライセンスくらいしかなかったのでは?



925 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:15:10.37 ID:Xl1FJm59.net]
>>914
そんなもんがあるのか?実例よろしく

926 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 03:57:50.76 ID:QacWHPnJ.net]
ja.wikipedia.org/wiki/%E5%B6%8B%E6%AD%A3%E5%88%A9

こういう人がいたんだよね

927 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 10:32:45.63 ID:SqhIr943.net]
>>913
プロプラなもののより良い代替をオプソで提供するのがGNUのそもそもの目的だから、何か微妙に勘違いしてないか?

928 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 19:44:07.99 ID:PR3x9no5.net]
>>918
public domain

929 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:12:39.33 ID:eefQLiAy.net]
boostの多くは日本語のwebにあったのを参考にして作ったのが多いらしいよね

930 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:16:09.35 ID:dzlTlaxn.net]
よね、と言われてもな
ソースくれよソース

931 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:35:49.48 ID:8KYb0WXA.net]
起源は韓国ニダ

932 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:58:44.85 ID:BTv6StGE.net]
boostで日本人だと言われても、k.inaba氏くらいしか知らんぞなもし

933 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:18:15.83 ID:ntgtG/kn.net]
boostは新しいC++の土台になっているよな
つまり日本はすごくC++に貢献しているってことだよな
華々しい表は欧米の奴らに持たせ、日本は縁の下の力持ちとして強力貢献って感じか

934 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:54:04.05 ID:af4pwMis.net]
そんなことに国を持ち出さないでくれ
優秀な奴がたまたま日本生まれだっただけだろう
ただ…超便利!



935 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 22:58:16.91 ID:F+VXkOpH.net]
インターフェースクラスをテンプレートにするのってアリでしょうか?
そういうのを見たこと無くて違和感があるんですが。

class Aがclass Bを所有してます。
AはBの関数を呼んでますが、Bの方もAの関数を呼ぶ必要があり、
直接相互に呼びあうのは行儀が悪いのでBが呼ぶ部分をインターフェースとして切り出しています。

class A : public IA{
vector<B *> member;

class B{
public:
B(IA *owner)
: m_owner(owner){}

void xxx(){
m_owner->func();
}

みたいな感じで。実際はもうちょっと複雑なんですが。
で、Bが保持するデータの型をパラメータしたくなったんですが、
そのデータはAにインターフェースを介して渡してもいるという状態です。
あ、ちなみにこのインターフェースはB以外からは呼ばれることはありません。

936 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 23:55:29.98 ID:J7anNUIN.net]
相互参照が発生してる時点で違和感がある C++は相互参照を上手く扱えないのでそれを取り除くことから考えてみたらどうか

937 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 00:31:02.32 ID:03j6Q/GA.net]
そもそも >>929 が書いたコードは } が2つ程足りないのだが

938 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 00:42:49.70 ID:oq+5i/Zd.net]
>>931
そうなっているのは、こんな感じって示すコードだからだろ

939 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 01:09:14.39 ID:03j6Q/GA.net]
フラクタル構造だろコレ
無理に決まっているジャン

940 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 01:56:33.54 ID:03j6Q/GA.net]
よくよく見たらIAを参照しているだけだからネストしてもいないんだな
というか普通にできるんじゃね?

941 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 02:33:18.90 ID:CBuO+9f9.net]
小手先の実装はどうでもよくてAにメンバ関数テンプレートを持たせるのが本質的な解法じゃないのか

942 名前:デフォルトの名無しさん [2014/04/03(木) 07:03:25.84 ID:giRIvbWR.net]
>>931
そんなことは全く問題にしてない

943 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 07:26:26.82 ID:7TERZTkc.net]
>>929 のコード片見て後略とわからない奴がいるとは...

944 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 23:01:08.26 ID:ED9H8RNO.net]
>>929
ごめん、ちょっとよくわからない。
template をどこにつける意図?

1.class IA
2.class A
3.そのメンバ



945 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 08:29:34.22 ID:ziFJe0J7.net]
皆さんレスありがとうございます

>>938
BにtemplateつけたくなったらIAにもつけなくてはならなくなった、みたいな感じで

template<typename Data>
class A : public IA<Data>{
vector<B<Data> > member;

template<typename Data>
class B{
Data data;
public:
B(IA<Data> *owner)
void xxx()
{
m_owner->func(&data);
}

template<typename Data>
class IA{
virtual void func(Data *){}
};

みたいになるのかな

>>935
えーと、となると
インターフェースにメンバ関数テンプレートを持たせるのはアリか?
という質問になりますね

946 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 08:48:27.82 ID:kYKaj4mW.net]
JAVA() がインターフェースにメソッドの実装を書ける程度には
忌みがあるだろう
だが普通はしない

947 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 13:06:47.93 ID:teewvH1C.net]
インターフェイスクラスなんか用意せずにA<Data>,B<Data>で直接よび合えばいいじゃん
プログラミングにおいては直接的・機能的な設計・実装をさまたげる個人的な価値観や美意識は有害なだけで不要でしょ

948 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 16:52:35.16 ID:8Cig6QUM.net]
>>930
読んで「は?」と思ったから調べたけど相互参照NG説のソースが見つけられなかった

迷信?それとも根拠ある主張?

949 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 17:02:40.96 ID:rdn2uojJ.net]
とりあえず>>929>>939が開いた括弧をとじるよ
};
};
};
};

950 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:02:23.96 ID:h+qk3VAa.net]
>>942
相互参照してるとオブジェクト破棄の責任が決まらず、リソースリークや二重破棄を引き起こす可能性がある。
もちろん片方をshared_ptrにしてもう片方をweak_ptrにするなどして所有なのか只の参照なのかを明確にすれば安全に相互参照はできる。相互参照というより相互に所有するのが問題だったね、申し訳ない。

951 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:23:55.67 ID:8Cig6QUM.net]
>>944
要するにC++の言語仕様上の問題に過ぎず、オブジェクト指向一般の話では相互参照や循環参照は問題ないってことかぁ?

952 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:50:26.91 ID:h+qk3VAa.net]
>>945
他の言語はあまり詳しく知らないけど、GCが用意されていたり、参照を基本としたりする他の言語では問題は小さいだろう

953 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 18:59:12.33 ID:tpgdbbWH.net]
>>945
適切に設計すれば問題はないが、注意しろってはなしだろ

954 名前:929 mailto:sage [2014/04/04(金) 19:17:02.12 ID:ziFJe0J7.net]
今帰宅しました
皆さんレスありがとうございます

>>942
相互参照NGの理由はジョン・ラコスの「大規模C++ソフトウェアデザイン」で書かれています
確か
・コンパイル・リンク時のコストが増大すること
・お互いに単独で使用できないので単体試験ができない
等が理由に挙げられていたと思います

>>943
ありがとうございます^^

>>930
概念的に独立したクラスが相互参照しているわけではなく、
Graph,Edge,Vertexみたいな感じの関係のクラスなんです
例えがパッと浮かばなかったので>939ではレス返せませんでした、すみません



955 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 19:34:13.91 ID:h+qk3VAa.net]
>>948
>>929,>>939について、Bの持つデータ型が複数あるというが、単一のAが所有するBはそれぞれ同じ型のデータを持つのか?そうならばIAやAをテンプレートにして、A<T>::BやA<U>::BをA<T>やA<U>がそれぞれ所有するのがいいだろう。
単一のAが複数の型のBを所有する場合にはもう少し複雑な機構が要求されるだろう

あと、生ポインタを使うと意図がわかりづらくなるので、適切なスマートポインタやクラスを用いるべき

956 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 19:39:28.67 ID:eu/rYsXw.net]
利用だけならナマポ使っちゃうな
インスタンス管理でどっちも死なないことが分かってるし

957 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 [2014/04/04(金) 23:43:32.61 ID:CAL3SSDr.net]
質問です。
inline const char *func(void){
static const char *s = "…ものすごく巨大なデータ…";
return s;
}
複数のコンパイル単位から参照される巨大なデータを
うまくヘッダに埋め込むにはどうすればいいか?

958 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 23:49:30.08 ID:wXNGFrYS.net]
// huge_data.h
extern const char* const s;

// huge_data.cpp
#include "huge_data.h"
const char* const s = "...huge data...";

こういうこと?

959 名前:デフォルトの名無しさん [2014/04/04(金) 23:53:22.93 ID:CAL3SSDr.net]
.cpp不要で重複なしにしたいらしいです。

960 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:09:53.25 ID:NnouwwX7.net]
__declspec(selectany)

961 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:10:33.60 ID:N4PVE6y4.net]
0xcc.net/blog/archives/000076.html
これ使ってexternすれば

962 名前:929 mailto:sage [2014/04/05(土) 00:11:02.58 ID:HMLu+RLn.net]
>>949
単一のAが所有するBは全部同じ型です
AがBの生成、破棄を担ってて、生存期間も同じなのでナマポのままでいきます

とりあえず色々ご意見頂けたので質問は閉じさせて頂きます
どうもありがとうございました!


あ、>948の補足です
相互(循環含む)参照しないことのメリットは依存性に明確な順序をつけることが可能なことです
A→Bを(Bが変更されるとAのコンパイルが必要)を意味するとします

A←→BとかA→B→C→A→…とかになっているとそれらのクラスをまとめて試験しなければなりません
A→B→C→DとなっていればDを試験して十分信頼性が高くなったらCを試験して、と段階的にいけるということです

963 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 01:05:19.01 ID:kCbCwa1D.net]
ポータブルでスマートな解決策はC++にはないでFA。

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

964 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:18:58.03 ID:Q7PCNbm7.net]
>>957
それって前にも上がってたやつじゃダメなの?

template <int N>
struct banzai {
static const char* s_char;
};

template <int N>
const char* banzai<N>::s_char = "abcdefghijklmnopqrstuvwxyz";

inline const char* s_char()
{
return banzai<425>::s_char;
}



965 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:25:12.80 ID:DYmjPU4E.net]
>>951
そのコードで何か問題あるの?やりたいことができてるように見えるんだけど。

966 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:37:41.29 ID:kCbCwa1D.net]
>>959
ものすごく巨大なデータが何個も作られたら嫌だろ

967 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:45:32.24 ID:DYmjPU4E.net]
>>960
そんなことにはならないよ。
7.1.2 [dcl.fct.spec] p4
> ... A string literal in the body of an extern inline function is the
> same object in different translation units. ...

968 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:50:56.07 ID:YrLzJmoN.net]
普通のSingleton

969 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:57:47.22 ID:Q7PCNbm7.net]
>>962
>>953

970 名前:KAC mailto:sage [2014/04/05(土) 02:06:26.69 ID:Dr+e6snh.net]
問題の出し方がいまいちよくわからんね。
たぶん、#include使って複数から参照するって話でもしたいのかと。

971 名前:デフォルトの名無しさん [2014/04/05(土) 02:06:28.48 ID:kCbCwa1D.net]
>>961
それはC++0xからだっけ?

972 名前:KAC mailto:sage [2014/04/05(土) 02:07:17.21 ID:Dr+e6snh.net]
安価忘れた orz

973 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 03:13:14.83 ID:DYmjPU4E.net]
>>965
いや、C++98からずっと。

974 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 04:04:26.33 ID:Ir5lnMtW.net]
>>958
特定の意味を持つ変数を整数で識別するなよ
お前はローカル変数もをv001,v002,v003…にしてるのか?

>>964
ヘッダに入れたいと言ってるんだから
コンパイル速度の話でなくて複数翻訳単位で
実体を同じにするという話だろjk
(すでになってるが)



975 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 05:21:00.49 ID:kCbCwa1D.net]
俺のMinGW g++がおかしいのか? 同じデータをいくつも埋め込むんだが

976 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/04/05(土) 06:50:35.55 ID:ILQmFswz.net]
>>969
externが足りないからじゃなくて?

ISO/IEC 14882:1998 7.1.2 段落4
A static local variable in an extern inline function always refers to the same object.

extern inlineの部分はタイプライターっぽいフォント。

977 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:21:57.84 ID:Lxf79fPB.net]
ものすごく巨大なデータをヘッダに書かなければならない自分をまずどうにかしろよ

978 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:26:30.69 ID:4p3tjfYN.net]
externが要るのか知らんかった
・extern inline内の静的変数は実体が同じ
・extern inline内の文字列リテラルは実体が同じ
前者はsが同じアドレスになって
後者は"...huge data..."が同じアドレスになる

関数がexternならsにstaticは要らないということか

979 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:34:17.87 ID:eKUnQEXz.net]
関数がexternでなくても
inlineでなくても
sにstaticがいる筈がない

980 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 07:47:12.92 ID:rrGengiU.net]
俺C/C++はよくわからんが、
// huge_data.h
extern const char* const s;

// huge_data.cpp, huge_data.hはインクルードしないでグローバルで
const char* const s = "...huge data...";

// sを使うhuge_data.cpp以外の.cppでは
huge_data.hをインクルード

これでは駄目なのか?

981 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:04:10.88 ID:4p3tjfYN.net]
>>974
質問者の意図は「何とかしてヘッダだけで済ませる方法はないか」
なのだから、その回答では駄目だな

982 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 [2014/04/05(土) 08:17:35.23 ID:kCbCwa1D.net]
VC2008,BCC32の場合はexternを付けなくても単一になった。
g++の場合はextern付けても単一化されなかった。
g++の問題みたいですね。

983 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:23:09.04 ID:cxjx9B8n.net]
↑これが最後のファイナルアンサー

984 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:46:29.27 ID:rrGengiU.net]
>>976
付けなくても単一になったって、
仕様上はextern付けないと駄目なんだろ。VC/BCCは警告ぐらい出るようにしないと駄目だろ



985 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:48:36.70 ID:e3mydc3l.net]
↑論理的思考の出来ない馬鹿

986 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:52:58.41 ID:kCbCwa1D.net]
bug-g++@prep.ai.mit.eduにバグレポート送りました

987 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 08:54:16.09 ID:e3mydc3l.net]
ところでさ
static inline void f();
extern inline int & f() {
 static int var;
 return var;
}
っていう関数fは内部リンケージを持ちながらも
varは翻訳単位間で同一になっちゃうの?
おかしくね?

988 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 09:01:48.91 ID:Q7PCNbm7.net]
そのうちまた、「ヘッダはコンパイラが提供するものなのであなたが作らないでください」厨が現われる。

989 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 09:22:37.95 ID:S+nT1w4a.net]
煽るなよ
一応規格ではそういう定義なんだから

990 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 10:40:34.53 ID:90I2C7qj.net]
今時g++なんて使う奴は情弱

991 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 11:10:50.62 ID:ptPAYM2R.net]
今はh++がきてます

992 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 11:24:36.69 ID:4p3tjfYN.net]
次スレ
C++相談室 part112
toro.2ch.net/test/read.cgi/tech/1396656048/

993 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 12:39:58.92 ID:jmoC0q2p.net]
>>986
おつ

994 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 14:04:18.14 ID:pKk9GxNe.net]
clang++はwindowsで使えないからなあ。。。



995 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 14:16:06.85 ID:p10Tb89F.net]
時代遅れ

996 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 14:18:56.48 ID:OrTtrRA7.net]
windowsはまだまだ現役でしょ

997 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 16:24:57.59 ID:LokGB3M7.net]
勉強用としてはgccのヘンテコな仕様よりはVC++の方がマシ
clangが使えるならclang一択

998 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:21:33.76 ID:x1RB96gi.net]
gccがヘンテコとか、何を持ってそう言っているのかすごい気になる

999 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:27:40.68 ID:IFpoXzod.net]
気になるというか、凄く臭い立つしったか臭があるだけだがw
偉大なるgccを批判できるような力量もってるやつなんて、この板にはいない。

1000 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:12:49.24 ID:RDsNMK1o.net]
sun os 4.x でgccの野良ビルドは大変でした。

1001 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:39:33.53 ID:anSZmmIR.net]
某虫の記事であったけどvariable length array in structureとか勝手に拡張すんなってことだろ
批判されても仕方ない

1002 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:39:37.54 ID:EOtAE3K1.net]
gccが駄目でclangの普及が加速しているんだろ
長い間の繰り返し建て増しで劣化したって感じじゃないのか
建て増しって言えばC++だが

1003 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:03:16.44 ID:x1RB96gi.net]
>>995
でもそれC++14で規格になるんでしょ(Linuxのカーネルソースで使われてるし・・・とか江添さん言ってた気がする)
gccの内部の作りが複雑怪奇なのはそうかもしれんが、仕様がヘンテコってのはやっぱりおかしい

1004 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:05:26.99 ID:3z3TJ4eu.net]
仕様が〜実装が〜って言ってると自分が満たされるんだろうよ。
ほっとうこうず。たぶんそいつそれ以上いじっても何一つ有益なもん出てこない。



1005 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:20:07.43 ID:anSZmmIR.net]
勉強用って話だから初学者が拡張と知らずにその記法を覚えたらどうすんだってことだろ

1006 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:25:19.87 ID:p10Tb89F.net]
>>997
なってねーよハゲ

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

1008 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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