C++相談室 part158

レス数が1000を超えています。これ以上書き込みはできません。
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/
2022/02/14(月) 15:33:51.02ID:lu0CYRrt
コードがないし状況不明で困ってる文面にも見えないからアレで十分
2022/02/14(月) 17:52:44.50ID:m3z01MvF
uniform_int_distributionって本質はIntTypeのペアを持った関数オブジェクトだから毎回生成したところで遅くはないはず
2022/02/14(月) 20:03:27.39ID:vE8mmwyH
乱数ってだいたい静的になんか持ってるよね
2022/02/14(月) 20:44:52.17ID:UkhMLhRO
マルチスレッド環境用にジャンプって機能が疑似乱数にあるよな
「疑似乱数 ジャンプ」でぐぐると出てくる
2022/02/14(月) 21:33:11.13ID:CqI2HZWm
状態持ってるのはエンジンの方
分布ごときにどんな怪獣ブラックボックスのイメージ持ってんだ
2022/02/14(月) 21:37:34.26ID:zjXK/l5x
エンジン以外に何があんの?
2022/02/14(月) 22:08:14.48ID:2E5iBc/D
例外処理で、catchした後、どのクラスがthrowしたのかってわかりますか?
2022/02/14(月) 22:35:41.44ID:jOONNl+N
初心者質問ですみません。
ヘッダで定義したテンプレート特殊化の非推奨属性がヘッダ外で効いてないっぽいんですけど、
ヘッダ外でも非推奨としたい場合何か特殊な事をしないといけないとかありましたっけ?

例えば
.h
```
template <std::integral INT_TYPE>
struct int_auto
{
using type = auto_int_detail<std::is_signed_v<INT_TYPE>, sizeof(INT_TYPE)>::type;
};

template <>
struct [[deprecated("char type is not allowed")]] int_auto<char>
{
using type = auto_int_detail<std::is_signed_v<char>, sizeof(char)>::type;
};

template <std::integral T>
using int_auto_t = int_auto<T>::type;

int_auto_t<char> i_header; // これは非推奨
```

.cpp
```
int_auto_t<char> i_cpp; // これは非推奨じゃない
```
となっています。
MSVC++(v142)で言語標準準拠はstd:c++20です。
2022/02/14(月) 22:41:31.68ID:eI8f6/6+
>>924
それ自体には発生元を特定する情報を持たないけど……。
どういう状況?

・ 例外的な状況から回復する必要があって発生源によって処理の切り替えが要る
・ プログラムの正常系が動くはずなのに何故か出てくる例外の元を特定したい (つまりデバッグ用途)

どちら?
2022/02/14(月) 23:02:44.91ID:2E5iBc/D
>>926
大学でこういう課題を出されたのですが、全然いい方法がわからないです。
「あるクラスの例外だけをレポートするためにはどのような実装方法があるか」
2022/02/14(月) 23:08:22.30ID:BDOt87Dq
>>927
ヒント。例外はクラス等なんでも投げられる。そしてクラスは継承できる。
2022/02/14(月) 23:11:22.86ID:R5SapkSQ
それはどのクラスがthrowした、じゃなくて、どのクラスがthrowされた、の間違いだな

例外 c++で検索すれば答えはすぐ出てくるよ
2022/02/14(月) 23:29:00.15ID:a+DIA8ij
>>916
>>917
嘘やんと思って試してみたらマジでいけるやんけ知らんかった

インスタンスフィールドまでは触れんかったが
2022/02/15(火) 00:14:19.75ID:VnfLS+lO
>>928
なるほど。std::exceptionを継承した自作クラスを定義して、
それを投げるというこですね?
2022/02/15(火) 00:23:09.85ID:vbEMbnXt
throw this;
2022/02/15(火) 14:33:45.24ID:StNRh9X/
クラスメンバをforで回す方法はありますか?

例えばintのaとdoubleのbという2つのメンバを持つクラスがあったとして、
forループでクラス内のメンバ変数を全部加算したい、など。

イメージはこんな感じです。
double all = 0.0;
for (T member : this->allMember)
{
all += member;
}
2022/02/15(火) 14:55:33.51ID:aaenmMxg
for で回さないといけないほど多数のメンバー変数がある設計をまず見直すべき
2022/02/15(火) 14:59:14.95ID:0rNaChGh
リフレクションは無いというのが回答か
2022/02/15(火) 15:15:26.06ID:AWN50YIA
動的にロードするのでなければ、自分で登録するか、ソースから解析するタイプのリフレクションライブラリを書くか探せばいい
2022/02/15(火) 15:16:41.63ID:g9Gn9R1H
配列じゃあかんのか
2022/02/15(火) 15:22:08.66ID:3zKYAjvH
数学のベクトルクラスでも作成してるのかい?
2022/02/15(火) 17:13:44.36ID:QbgtcDS7
>>933
あるよ。おすすめするわけじゃないけど。
https://www.google.com/search?q=boost+fusion+for_each+struct

こんな奇怪なライブラリ使わなくても済むようにするための言語側サポートはいずれも提案中。先は長い。
P1306 Expansion statements
https://github.com/cplusplus/papers/issues/156
P1240 Scalable Reflection in C++
https://github.com/cplusplus/papers/issues/545
2022/02/15(火) 17:28:44.20ID:AWN50YIA
じゃあこれもオススメではないがリフレクションベースで
https://www.rttr.org/
を使った例でも...
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
type t = type::get<s>();
double sum = 0.;
for (auto& prop : t.get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
// 思いつきで聞いてるだけな気もするけどw
2022/02/15(火) 17:31:44.80ID:AWN50YIA
ちょっと修正
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
double sum = 0.;
for (auto& prop : type::get<T>().get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
2022/02/17(木) 18:59:32.62ID:bHlhY+TU
std::unique_ptr</*見切れる程長いクラス名*/> looongPtr{ std::make_unique</*見切れる程長いクラス名*/>(/*見切れる程多い引数*/) };
unique_ptrをメンバ変数にするときに最初のとこをautoに出来ないんですか?
2022/02/17(木) 19:17:57.96ID:9tUnWmYs
make関数使えば?
2022/02/17(木) 19:30:29.28ID:sNGWbyyl
typedef longlonglongtypename shorttypename;
auto ptr = std::make_unique<shorttypename>...
2022/02/17(木) 20:09:06.95ID:TNf7BdQD
>>942
できないですね。
https://cor3ntin.github.io/posts/auto_nsdmi/#so-why-are-auto-nsdmi-not-in-the-standard
2022/02/17(木) 20:26:37.89ID:wIu//gsc
>>942
設計を見直せ
2022/02/17(木) 21:57:39.99ID:d4bhbZak
単なる○○できますか?に対して設計見直せとだけ言ってくるガイジなんなん
まず質問に答えた上でなら分からんでもないが
2022/02/17(木) 22:12:03.03ID:wIu//gsc
うるせぇ雑魚が
2022/02/17(木) 23:04:10.74ID:wrwPyddf
ざーこざーこw
2022/02/17(木) 23:56:12.71ID:bHlhY+TU
🤔
2022/02/18(金) 00:20:49.11ID:q/M7jrOo
C++の業務ってことで入ったんだけどC++とは名ばかりのC言語バリバリのコードだった
C++11、いやせめてCじゃなくてC++を書こうとしようぜと思うんだけど世の中こんなんばっかなん?こういうケースほんっとに多くてさぁ
40代↑の人が書いてるC++の言語って大体ほぼCでうんざりする
2022/02/18(金) 00:25:14.77ID:qZSzRw8s
偏見だけど同名の関数が並んでる以外Cとしてコンパイルできそうなイメージある
2022/02/18(金) 00:25:30.70ID:fowo2HBL
>>951
なんでそんなことになるんだろうな?
コンパイラを信用してないからか?
ワイは40代以上やけど C++ を使える状況であえて C 的なスタイルで書く気はしないわ。
だって単純に面倒くさいもの。
2022/02/18(金) 00:26:19.39ID:VWFgwWIW
で、相談は?
2022/02/18(金) 01:20:21.17ID:x3azmRP7
Cの文法が覚えられる限界なんでしょうな
2022/02/18(金) 02:48:20.56ID:y/CjghL0
人事部の人がCとC++の見分けがつかなくて
会計上コンパイラ代に「C++」と書いてあったから
C++で募集かけてたんじゃね?
2022/02/18(金) 03:23:56.08ID:AKyBDynF
>>953
C++で通らないCは書きたくない、とは思いますね
2022/02/18(金) 13:34:17.22ID:NqXxszTV
>>951 ←こういう初心者にじゃあすべて作り直していいよ、と言うと何もできない。

無職の妄想からは何も生まれないのだよ。
2022/02/18(金) 14:23:13.29ID:y/CjghL0
自分は何かできるとでも言いたげだな
すべて作り直すということがどのくらいの工数かわかってないんだろ
960デフォルトの名無しさん
垢版 |
2022/02/18(金) 15:06:16.89ID:tL/18rdC
>>958
俺もそう思う

現場の不平不満ばかりの意識高い系エンジニアさん多いよね
その現場を改善するわけでもなく文句いうだけ
高いスキルあるならそんな現場やめれば?
単価150万超えるようなとこなら周りにも高スキルな人がたくさんいるよ?

現場の文句言うだけの奴は結局その現場がお似合いのレベルなんだよ、っていつも思ってる
2022/02/18(金) 15:32:05.24ID:dD/fDJ+w
>>951
普通の職場ならコーディングスタンダードあるから勝手はできないだろ。

コーダーとライブラリアンで許可されている範囲も違うだろうし。
2022/02/18(金) 15:57:07.65ID:NqXxszTV
>>955
無職が言いそうなことだ。無能なブロジェクトリーダーはCプロジェクトをあっさりとC++化できる、
存在しないスーパープログラマを探し続けるがそんな奴はどこにもいない。
そんなスーパーPGがいたらATMはバグで止まらない。C++書ける奴はCをバカにしないよ。
2022/02/18(金) 16:33:00.65ID:xb2lszF9
バグ出たまま放置してるヤツはバカにするけど
2022/02/18(金) 17:01:46.61ID:1bc1nI/9
正当な理由もなくスマポやSTLを嫌がった結果
生ポインタをガチャガチャいじくり回したスパゲティコード書いて
それが遅くて非効率でバグまみれリークだらけというのは非常によくあるけど
そういうCプログラマ様も敬わなきゃダメ?
2022/02/18(金) 17:04:32.95ID:y/CjghL0
バイアス満載だな
落ち着けよw
2022/02/18(金) 17:19:05.78ID:xb2lszF9
そういうどうしょうもないのはヒソカに心の奥でバカにしていいし反面教示にすべし
2022/02/18(金) 18:15:33.32ID:jeS+/hUn
マ板かここ?
2022/02/18(金) 20:06:32.33ID:z2RoOtDN
80対20の法則は大事だし、動くコードを作ってから最適化をした方がいいって偉い人も言ってた気がする

リソース管理はとりあえずスマポを使うのが吉だと思ってます
969デフォルトの名無しさん
垢版 |
2022/02/18(金) 20:12:42.95ID:N0FOn5a0
自分で責任もって結合テストする覚悟があるんならいくらでもCからC++に置き換えていいと思うよ
2022/02/18(金) 20:34:30.32ID:y/CjghL0
とテストの基本がわかってないやつが言う
C++に動的な型宣言はないからな
2022/02/18(金) 20:38:01.63ID:NqXxszTV
効率ガーと言うが、CをC++に書き換えて高速化、省メモリ化するなんてむしろレアケース。
2022/02/18(金) 20:44:21.03ID:y/CjghL0
C++の隠れたコードが何をしてるか解ってないやつが
C++にしたら高速化した低速化したって言語のせいにするんだよ
2022/02/18(金) 21:35:17.98ID:UZsjZs7N
こういうとき悲しいのはね
CもC++もたいして知りもしねえド素人のアマチュアが
想像と思い込みでもっていろいろレスつけてくること
噴飯ものだぞ?
2022/02/18(金) 23:03:13.88ID:k8EYArXJ
c++書いてたとき何ちゃらストリームやらのファイル操作遅すぎてムリすぎて結局fopen使ったような…
まあ便利は便利なんだけど利便さ求めるならそもそもpythonとかに逃げますし
C++17未満?だとfilesystem使えなくてこんな簡単なことも出来ないのかと絶望した気もする
2022/02/18(金) 23:08:29.98ID:qZSzRw8s
std::endlがフラッシュ兼ねてるのを知らずに使うとクソ遅くなる
2022/02/19(土) 00:57:04.84ID:kSnJ/KwP
初心者にC++は早い
C++は人類に対する挑戦
2022/02/19(土) 01:05:13.77ID:Sb0QDKc0
みんな最初は初心者
2022/02/19(土) 01:28:32.55ID:MLwzxLgZ
Appleのcopland、Googleのandroid、MSのEdgeの失敗を見れば
予算と開発期間が十分にあれば解決すると思ってるならそれは間違いだと理解するだろう。
生ポインタをこねくり回す程度で脳みそのキャパが越えてるようじゃC++使ってもまともな実装なんてできない。
隠れたコードも何もC、C++はアセンブラの知識は必須だ。バイナリを読めるようになってから文句言え。
2022/02/19(土) 03:09:27.37ID:kSnJ/KwP
フムフムアセンブラが必須か…
https://godbolt.org/z/jq16j83We
#include<vector>
using namespace std;
void f(char* dst, const char* src_start, const char* src_end) {
const char*s = src_start;
char*p = dst;
while (s != src_end) *p++ = *s++;
}
template<typename Dst, typename Src>
void f2(Dst dst, Src src_start, Src src_end) {
auto s = src_start;
auto p = dst;
while (s != src_end) *p++ = *s++;
}
void hoge() {
vector<char> dst(1024), src(1024);
f(dst.data(), src.data(), src.data() + src.size());
f2(src.begin(), dst.begin(), dst.end());
}
これってどうしてhoge側だとSIMD使わないの?
C++コードでSIMD使わせるにはどうしたらいい?
2022/02/19(土) 04:43:40.93ID:2+bZAOZm
valarray
2022/02/19(土) 04:46:13.97ID:kSnJ/KwP
不正解
2022/02/19(土) 06:01:38.84ID:2+bZAOZm
hoge側でどうSIMD使えって言いたいの?
inlineとかだったらしばくぞ
2022/02/19(土) 06:20:48.76ID:ZqDn11YK
イントリンシック、でしょう?
2022/02/19(土) 08:45:24.25ID:0ANF/iVA
Intelのコンパイラに任せ
2022/02/19(土) 09:52:14.21ID:kSnJ/KwP
1024 -> 1024 * 16にすると...
2022/02/19(土) 09:57:47.91ID:kSnJ/KwP
intrinsicは(inline)assemblerとほぼ同じなので、C#でしか使ったことないな
2022/02/19(土) 10:03:29.25ID:mDQ0X8WX
アセンブラなどの理解は「低レイヤを知りたい人向けのCコンパイラ作成入門」が結構勉強になったんですが、バイナリは何で勉強すればいいですかね?
2022/02/19(土) 10:34:54.00ID:0ANF/iVA
>>985
キャッシュメモリのアレで遅くなるやつか?
2022/02/19(土) 10:44:00.07ID:kSnJ/KwP
さぁ?・・・callしたり判定用コードやサイズ計算とかオーバーヘッドがあるからじゃね?知らんw
2022/02/19(土) 11:57:14.27ID:kSnJ/KwP
次スレ立ててきた
C++相談室 part159
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
2022/02/19(土) 12:08:36.38ID:2h4SA+VW
CADソフトCANDYの作者の発言。
>数年前に,私の会社で組み込み機器向けのプロジェクトで,C++コンパイラが安定して動かないので
>Cでプログラムを書くように私が指示したケースがあったのだが,
>何人かのエンジニアが「今さらCなんかでプログラムを書けませんよ。
>クラスを使えなければスパゲッティコードになってしまいます」と猛反対をしてきた。
■ 第4回 オブジェクト指向の本質
https://gihyo.jp/lifestyle/serial/01/software_is_beautiful/0004

別のインタビューと補完すると、そのときC++の標準ライブラリ的なブツを著者が
C言語でババーっと書いて仕事させたという話だったはず(記憶モード

ちょっどこの昭和カヨ?!
2022/02/19(土) 12:18:20.98ID:kSnJ/KwP
組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
別に昭和でも平成でも令和でも変わってないけど、>>991に伝わってないのは確か
2022/02/19(土) 12:50:13.00ID:gFosEVVi
GTKのGObjectはCでオブジェクト指向を実現している訳だけど
(ただし学習コストが低いとは言えないと思う)
2022/02/19(土) 12:53:15.56ID:2h4SA+VW
そんなん言ったらX Window SystemもC言語でオブジェクト指向しているらしい
らしい(伝聞
2022/02/19(土) 13:05:47.37ID:x/upE6G9
当たり前だけどアセンブラでもオブジェクト指向はできるし還暦の爺さん(とは言ってもなかなかの人ではある)が10年以上前に書いた記事だしまじで何を言いたいのかよくわからん
2022/02/19(土) 13:20:12.26ID:kSnJ/KwP
分からん分からん言うのは誰でも出来るし、どんな初心者でも何に対してもそう言える
なので、具体的に分からん部分を指摘できない人は初心者か、荒らしだと思ってる
2022/02/19(土) 13:22:03.79ID:kSnJ/KwP
athenaくらいつかったことあるよね
2022/02/19(土) 13:28:47.19ID:2h4SA+VW
>当たり前だけどアセンブラでもオブジェクト指向はできるし
ちょっカプセル化(シンボルの隠蔽)にやや手間がかかるし
オブジェクトをスタックにのコピーして返すのにもさらに手間がかかるし、
コンストラやデストラの呼び出しの保証や継承関係のチェックについて処理系のサポートが一切無いし、
やんけ;;;
そういうオブジェクト指向のプログラミングパラダイムにおいて裏で当然働くべき処理が
プログラマーが手間をかけ注意を振り向け続けないと実現されないというのはオブジェクト指向しているうちに入らないのでは……
2022/02/19(土) 13:31:35.88ID:6TS2kFRN
brainfuckでもオブジェクト指向でプログラミングできるんやで
2022/02/19(土) 13:31:55.84ID:6TS2kFRN
>>1000なら次スレでちんこ貼る
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 18時間 42分 38秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況