C++相談室 part141

■ このスレッドは過去ログ倉庫に格納されています
2019/02/22(金) 03:07:43.52ID:MgOIx7iK
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2019/03/18(月) 00:13:57.67ID:HNvbYtsL
Windowsカーネルのオープンソース化待ってます
2019/03/18(月) 05:32:24.67ID:+E07qlDR
sort関数の比較関数を、クラスのメンバ関数として定義すると invalid use of non-static member function というエラーが出ます。
なぜこれは禁止されるのでしょうか。
また、どうやって解決したら良いですか。
2019/03/18(月) 05:33:36.55ID:HNvbYtsL
エラーメッセージ読みなよ
2019/03/18(月) 06:41:53.05ID:8TZ/BLJn
理屈を知ってる人には当然だけど、初めての人は混乱する部分じゃないかな。
sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって
エラーにならずに使える関数の形式が違うってやつ。

>>442 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ?
2019/03/18(月) 08:08:37.98ID:HNvbYtsL
非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない
Class::funcをsortに入れたんでしょ
Class().funcとするかfuncをstaticにするだけ
2019/03/18(月) 08:49:38.19ID:fJqFZa8b
今時はClass().funcでいけるんすか
2019/03/18(月) 09:58:55.92ID:7+YzgLjV
Class::funcってstaticじゃないの?
2019/03/18(月) 10:42:04.28ID:9EOa0iNV
->*みたいな書き方の意義がわかったら一人前どすな
2019/03/18(月) 11:13:12.39ID:27d4/ixp
ちなみにどんな意義があるの?
2019/03/18(月) 19:22:09.39ID:SgtRGl5R
>>444
bool mycomp(string a, string b);

です
2019/03/18(月) 20:05:14.79ID:c3AGzLzz
結局その場でラムダ式書くのが一番わかり易いんだよね
2019/03/18(月) 20:09:56.80ID:e40iBeRc
>>448
>>449
https://mevius.5ch.net/test/read.cgi/tech/1434079972/39
なんと! private なメソッドを呼び出せるのです!
2019/03/18(月) 21:20:34.54ID:lCR32A1k
エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい?
2019/03/18(月) 21:26:27.76ID:qJuL/kMQ
>>453
タイマー
2019/03/18(月) 21:43:42.87ID:lCR32A1k
>>454
例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです
2019/03/18(月) 21:45:05.39ID:ok5NeesM
普通にcのsort関数使えばいいのに。
キャストしたら負けとでも思ってんのかね。
2019/03/18(月) 21:59:25.97ID:MtU5H+Zb
>>455
cocos2d
2019/03/18(月) 22:47:37.12ID:DisgVN8i
std::initializer_list<int> l()
{
return std::initializer_list<int>{1,2,3};
}

std::vector<int> v()
{
return std::vector<int>{1,2,3};
}

int main()
{
for(auto i : l()){
std::cout << i << endl;
}
for(auto i : v()){
std::cout << i << endl;
}
}

0
0
0
1
2
3

なんで?
2019/03/18(月) 22:56:40.87ID:bBcTS09+
>>458
std::initializer_listはちょっと変わったクラスで、コピーやムーブしても中身が付いてこない
関数の戻り値にしてコピー省略とかが入ったとしても同様
460デフォルトの名無しさん
垢版 |
2019/03/18(月) 23:23:21.73ID:qPN/SC1k
>>456
cのsort関数はアドレス連続性がないコンテナには使えないでしょ。
vector::sort()とCのsort()の速度はあまり変わらないので、わざわざCのsort()を使う理由がない。
2019/03/18(月) 23:28:12.28ID:c3AGzLzz
qsort「おっワイの出番か?」
2019/03/19(火) 00:00:01.33ID:V3eHYYxi
cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。
2019/03/19(火) 00:37:48.08ID:wfF3ncvB
template<typename T>
T func(T a){
}
という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。

関数ごと特殊化する方法があるのは勉強したのですが、一行分の処理を特殊化するために関数ごと特殊化するべきなのでしょうか。

簡単化のため、必要さが全くない例になっていますがよろしくお願いします。
464デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:43:22.56ID:fW/dBWxG
STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。
465デフォルトの名無しさん
垢版 |
2019/03/19(火) 00:49:23.69ID:fW/dBWxG
>>463
https://ideone.com/Oo65ND
これでいいのか知らんけど。
2019/03/19(火) 00:54:54.54ID:V3eHYYxi
>>463
簡単化しすぎて何を質問したいのかよくわからない
その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい
intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい

前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい
2019/03/19(火) 00:56:32.83ID:wfF3ncvB
>>466
特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。
2019/03/19(火) 06:48:59.95ID:smCJKSpo
>>450
まずは、エラーなくコンパイルが通って実行できるまで。
単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。

たぶんソートしたいクラス中には比較する文字列以外のメンバもあるだろうから、
class myclass {
public:
 string s; // 比較対象の文字列
 int other; // それ以外のメンバ例
 ... // 他にもメンバ色々
};
こんな感じだと思う。

比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、
bool mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
469468
垢版 |
2019/03/19(火) 06:54:39.65ID:smCJKSpo
あるいは >>468 の段階はすでに通過してて、
「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。

bool mycomp(string a, string b);
このプロトタイプでクラスの「staticでないメンバ関数」にすると、
その関数はクラスのオブジェクトを介して obj.mycomp((string)a, (string)b)
という形で呼び出さなきゃならないのよ。

ところが std::sort() が比較関数を呼び出す場合は
どのオブジェクトとも関係ない mycomp((string)a, (string)b) を呼ぼうとする。

「クラスのメンバだけど、クラスの個々のオブジェクトからは独立した関数」に
するために、関数の宣言に static を指定する。
class myclass {
public:
 string s; // 比較対象の文字列
 int other; // それ以外のメンバ例
 ... // 他にもメンバ色々
 static bool mycomp(const myclass& a, const myclass& b); // 比較関数
};

(「改行多すぎ」につき、もう一回だけつづく)
470468
垢版 |
2019/03/19(火) 06:57:01.64ID:smCJKSpo
(>>469 の続き、長々とすまぬ)

関数の定義(クラス定義の外に書く場合)はこんな感じ。
bool myclass::mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
myclass のメンバ関数だと明示するために myclass:: をつけることと、
定義の方には static をつけない、てところが注意点。

std::sort() で使う時は、
std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。
…する必要が(俺の環境では)あるんだけど、myclass 同士を比較することから、
自動的に myclass のメンバ関数も候補に入れてくれても良さそうな気がする。
なんでダメなんだろ?
2019/03/19(火) 07:25:56.87ID:aaAbvqyx
たかがソート一つ実行するのにこれってやっぱc++は失敗しとるわ。。
2019/03/19(火) 07:30:30.93ID:/K8ycOQq
どの言語も似たようなもんだろ
2019/03/19(火) 07:31:18.45ID:K4E5ztRO
>>468-470
丁寧に教えてくださりありがとうございます。

今のところは、>>468に書かれているようにクラスの外に出す、という方針で対応しておりました。

クラスの中で static をつけて宣言をする、というのが元々やりたかったことに一番近いように思います。重ね重ねありがとうございます。



>>470
> std::sort() で使う時は、
> std::sort(std::begin(objs), std::end(objs), myclass::mycomp);
> 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。

これは、mycomp() をクラス内で非static に宣言したときにも使えますか。
それとも、クラスの外で
bool myclass::mycomp(const myclass& a, const myclass& b)
{
 return a.s < b.s; // 辞書式の昇順
}
流に宣言、定義した場合に限りますか。
2019/03/19(火) 07:33:59.57ID:LjcR+vA2
何のために非staticにこだわるんだ?
メンバにアクセスしないならstaticつけとけよ
2019/03/19(火) 08:36:28.37ID:I3ez8Qch
比較関数をメンバ関数としてクラスに内在させるのが良くない
外部化するか、演算子オーバーロードする
どちらかと言うと比較関数を作らずに大小関係を定義する言語だ

実は、関数やクラスの間の包含関係がある
クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い
クラス内部に置くなら大小関係の定義にすべきだ
この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている
2019/03/19(火) 09:31:11.81ID:wYd+ZeEZ
対称な演算子をインスタンスメンバにするのはセンス無いね
2019/03/19(火) 15:31:26.82ID:Pb8DX7io
>>463
template <typename T>
T func(T a) {
if constexpr (std::is_same_v<T, int>) return a * 2;
else if constexpr (std::is_same_v<T, double>) return a / 2;
else return a;
}
2019/03/19(火) 16:57:51.01ID:W9RsgnS5
namespaceを活用しろ
2019/03/19(火) 17:11:35.93ID:HTVBHQBE
>>477
これの方が関数として切り出して特殊化するより好きな見た目です
2019/03/19(火) 21:29:30.46ID:bWZzZfFH
>>477
それだと実行時に判断コストがかかるじゃん
2019/03/19(火) 21:29:55.51ID:QA3viZTS
if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか?
2019/03/19(火) 21:33:24.72ID:Nfgw9yWF
おじさん久々にC++の仕事受けたんだけど
色々進化してて面食らってます

今、右辺値参照っての勉強中なんだけど
ムーブコンストラクタとかはへーへーほーほー言いながら何となく分かり始めた

んだけどさ、

int &&x = 2; // ok <-これだけ使い途が分からん

ローカル変数の右辺値参照て何に使うん?
実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし
ローカル変数に&&付いてると何に使えてんな時便利なの?
2019/03/19(火) 21:34:25.38ID:/K8ycOQq
使わなくていい
2019/03/19(火) 21:40:02.75ID:kyorfls3
>>482
右辺値参照はほぼムーブコンストラクタのためにあると思っていいと思う
左辺値参照と同じように書けるというだけで、使うことはないかと
2019/03/19(火) 22:04:14.68ID:gYGT/BxR
変数宣言した右辺値参照そのものは左辺値という罠
極力そんな物作るべきじゃないね
486デフォルトの名無しさん
垢版 |
2019/03/19(火) 22:05:37.07ID:8COf7JeC
俺今使い道思いついたんだけど披露してもいい?
2019/03/19(火) 22:26:06.36ID:45LJYysD
>>486
どうぞどうぞ…
2019/03/19(火) 22:37:18.08ID:xP6m0cDT
>>480-481
if constexprは実行時コストゼロのはずだよ
2019/03/19(火) 22:53:01.58ID:bWZzZfFH
>>488
ifがなんで実行時ゼロなんだよ
2019/03/19(火) 23:23:47.41ID:hIuEq8sX
赤っ恥
2019/03/19(火) 23:26:12.29ID:/K8ycOQq
>>489
if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される
492デフォルトの名無しさん
垢版 |
2019/03/19(火) 23:38:47.81ID:zcFktSXp
これですか。すごいね、これ。C++17からだけど。

constexpr if 文
https://cpprefjp.github.io/lang/cpp17/if_constexpr.html
2019/03/20(水) 00:20:58.62ID:wnXzlprR
>>484
回答ありがとう
なるほど、文法上は書けるから仕様上厳密な定義はされてるけど、普通は特に使わないで良いのね
494デフォルトの名無しさん
垢版 |
2019/03/20(水) 00:27:33.64ID:K21QzJf5
初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。
他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。
2019/03/20(水) 00:56:45.75ID:LskeNtBJ
アスタリスク使ってポインタの中身取ったらあかんのか・・・
2019/03/20(水) 03:19:15.41ID:abqqrm1b
multimap よりも set の vector の方が便利なのですが、異端ですか?
2019/03/20(水) 04:26:37.96ID:LuG6mmni
別に
2019/03/20(水) 04:53:08.98ID:K9L8gFp5
>>482
既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。
ローカル変数的に使う理由はあんまりない。

テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは
特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。
2019/03/20(水) 07:25:39.73ID:iA5XXTHz
ローカル変数もそうだけどintみたいなオブジェクト性が低いものに使っても意味ないわな。
rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。
2019/03/20(水) 08:44:38.76ID:LSg3zFHe
オブジェクト性
2019/03/20(水) 10:22:31.87ID:fk3FMvWg
考えうるメソッドが少ない=オブジェクト性が低い、とかじゃねえの
int型の変数.length() とかは流石に意味不明に見える
2019/03/20(水) 10:40:09.36ID:LuG6mmni
言いたいことは分かるが聞き慣れない言葉を使っているということでは
2019/03/20(水) 11:01:00.31ID:9pRMZ9XY
リテラルが右辺値ってのがよくわからんのだが

上の例のように右辺値参照でうけるとリテラルなのにそのアドレスがとれてしまう
かつ書き換え可能

なので右辺値参照にリテラルいれるときは、一旦名前のない領域にコピーされていると理解している

でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの?
2019/03/20(水) 11:29:19.49ID:sS5iHBwg
右辺値参照変数それ自体は左辺値だからね
2019/03/20(水) 15:37:27.50ID:oYbI5+uJ
右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる
この点は左辺値参照も右辺値参照も一緒
2019/03/20(水) 16:05:23.24ID:9pRMZ9XY
それ >>503 に関係ある?
2019/03/20(水) 16:16:24.82ID:oYbI5+uJ
どうして関係ないと思うの?
2019/03/20(水) 20:55:29.39ID:9pRMZ9XY
一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる
言い方変えると
右辺値参照に代入するとき
リテラルが右辺値でなくて、そのコピーが右辺値なのでは?
そこに寿命がどう関係あるのかわからない
2019/03/20(水) 21:07:28.64ID:LskeNtBJ
アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの
2019/03/20(水) 21:31:53.81ID:iA5XXTHz
>オブジェクト性
コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが
思った以上に伝わらんもんだな。
わかりやすいようにintと文字列を例に出してもこんなもんかもね。
2019/03/20(水) 22:56:30.82ID:B8C8ZXR4
アドレスが取れたら右辺値ではないみたいな論調だな
2019/03/20(水) 23:15:02.74ID:oYbI5+uJ
>>508
C++のリテラルというのは右辺値を生成する式なんだよ
「42」は値42を持つint型の右辺値を生成することを指示するリテラル
「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル
プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ
その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい
(その必要がないならコンパイラがそうじゃないように最適化してももちろんいい)

「コピー」だと思うから違和感があるんじゃない?
リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない
2019/03/21(木) 00:07:41.99ID:2SUbybof
>>512
リテラルは右辺値でない、が正しい?
それなら半分なっとくだけど
ググるとリテラルは右辺値という説明がでてくる
2019/03/21(木) 00:13:13.37ID:2SUbybof
>>512
まだ半分なっとくできないのは、
上にも書いたけどリテラルで普通に代入するときも、
一旦右辺値を作ってから左辺にコピーする、というのかc++のセマンティクス?

なんか無駄すぎて釈然としない
2019/03/21(木) 00:14:13.96ID:FPuzf0hs
牛からは牛乳が出るけど牛は牛乳じゃないだろ?
そういうこと
2019/03/21(木) 00:20:16.95ID:FPuzf0hs
リテラルってのは文法要素なの
演算子とかキーワードとかコメントとかそういうものの仲間なの

実行時にはそんなものは出てこない
プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類
int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル
さっきからずっとそこを混同してる
517デフォルトの名無しさん
垢版 |
2019/03/21(木) 01:01:57.88ID:7qm1Whlz
'\0' と L'\0' で違うしな
2019/03/21(木) 02:01:40.67ID:/XDYuiDC
>>503,514
数値リテラルは右辺値。
https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1

右辺値で参照を初期化する際は一時オブジェクト(=名前のない領域)が生成され、
それが参照されるというルールになってる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init.ref#5.2

参照を初期化する際のルールは代入のセマンティクスとは関係ない。
int i; i = 42 の代入で一時オブジェクトは不要。
代入がユーザー定義された T::operator=(T const&) に解決されるなら、
引数の参照を初期化する際に一時オブジェクトが作られることはある。
519デフォルトの名無しさん
垢版 |
2019/03/21(木) 02:39:44.49ID:XdhJMiFj
即値になる場合があるから右辺値なのかね。
2019/03/21(木) 08:57:30.01ID:YzD9JPpd
そりゃ、代入の左辺にリテラルを置ける言語なんてまずないから。
2019/03/21(木) 09:47:23.84ID:MFgTD1Yv
コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが
moveに期待される機能。
即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には
上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば
その関数を呼びましょうってのがc++のmoveの取り扱い。
しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは
やっぱよくないと思うわ。
テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。
2019/03/21(木) 23:38:07.17ID:/AmzWt7k
会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw
言語を設計するなら、必要かもしれんが大抵は不要
2019/03/21(木) 23:48:46.46ID:4AnWSc+d
「だからC++スゲー俺スゲー」ってやつじゃないの?それ
>>521がそうだとは思えんが
2019/03/21(木) 23:52:29.07ID:MDPJmZ4F
最近は彼らもRustにマウント奪われて必死なんだよ
2019/03/21(木) 23:53:05.57ID:uQDXDHVg
理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない?
2019/03/21(木) 23:56:55.88ID:MDPJmZ4F
>>525
moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ
2019/03/21(木) 23:58:36.31ID:tdnDQnUt
>>526
マジで?!
それヤバくない?!
2019/03/21(木) 23:59:59.31ID:MDPJmZ4F
>>527
君はC++の30年の歴史を否定するのかい?
2019/03/22(金) 00:10:18.90ID:cT8zbTae
templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい
そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ
2019/03/22(金) 00:22:46.08ID:aMVb4R4+
いやいや
決まっていてもそれが複数だった場合使うだろ
あと普通にライブラリは作るものじゃ
2019/03/22(金) 00:54:33.33ID:wBHxe+dJ
ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・
・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして
きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに
いつのまにかライブラリができあがってる、これがプロの仕事だ
2019/03/22(金) 00:55:35.30ID:wNvbYX88
委託業務メインなの?
533デフォルトの名無しさん
垢版 |
2019/03/22(金) 01:10:14.13ID:LxKdyD8r
定数って参照透過性があるよね。
C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。
2019/03/22(金) 01:14:02.50ID:6voZlles
コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。
535デフォルトの名無しさん
垢版 |
2019/03/22(金) 02:28:04.74ID:jw/5aFNH
しーぷら一筋30年〜、速いの、上手いの、やっすいの〜
2019/03/22(金) 02:37:28.24ID:M4ChOHMa
>>534
>コンパイル時レイトレーシング
一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは
全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能)
あの試み自体は面白いと思うけどね・・
実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが
2019/03/22(金) 06:24:27.94ID:j45II+ff
プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない
2019/03/22(金) 08:03:01.00ID:VPBgCitj
コンパイル時ファイル入出力がサポートされればいいわけだ
それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう
画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ
2019/03/22(金) 08:17:25.29ID:sSVPAm0I
汎用的につかってもらうことを目的としているライブラリを除けば
コーディング時に型が決まっていないことなんてありえない

もしあるならそれは設計してないってことじゃん

templateなんて汎用的につかってもらうことを目的としているライブラリを書く場合にしか使わないだろ

後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど
きっちり設計しろよ
2019/03/22(金) 08:28:45.64ID:wNvbYX88
>>539
>>530
2019/03/22(金) 09:08:34.94ID:OAKB0NCU
>>538
コンパイル時にやることじゃない
新たなc++の巨大トラップだよ
ますますc++嫌いになった
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。