質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

962閲覧

type_infoでの比較の安全性

hoge111

総合スコア17

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/04/18 12:03

編集2021/04/20 06:32

質問:type_infoの比較は安全か
type_infoでクラスAとクラスBを比較したとき!(A==B)が保証されているか

参考

Safest way for unique type identification in C++11

Comparing two type_info from typeid() operator

2021/4/20 質問を編集

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/04/19 01:45

英語が全くわからないならそもそもプログラミング出来ないです。諦めるか、 Google翻訳先生とにらめっこして頑張りましょう。 後、質問文に無駄な絵文字とか入れないでください。はっきり言って解決する気が あるのかと思いますし不快です。
hoge111

2021/04/19 02:20

英語が全くわからん というのは 「i can't speak English」のニュアンスです もし英語が全くわからない人でも諦める必要はないですし強制されることもありません(英語が大事なのは正解) 解決する気がなければ、問題を再現するコードを考えて質問サイトに貼って、解答欄のコメントに返信などしません。自己解決した場合は自己解決の機能を使っています。 無駄な絵文字をいれるな に関しては 誹謗中傷などではないので「不快に思われる方もいるでしょう」としか言いようがありません。まあ確かに絵文字を入れすぎな感じはありますがw
K_3578

2021/04/19 02:38

貴方がどういう職に就いているか知りませんが、英語はspeakの意味でも出来た方が良いと思います。 (これに関しては単なる老婆心からの忠告とでも思ってください。) 諦める必要は無いですが、全く分からない人がプログラミングをやるのは非常に学習コストが掛かりますし、英語を一々コピペして翻訳に掛けてという行程をするより、英語がせめて読めるぐらいには なった方が先々を見据えると便利だと思います。基本的に最新の情報などは英文で書かれていますから。 解決する気があるのなら、回答者とのやりとりの間で質問文に追記するべき情報が出てきたならば すぐに追記するべきです。問題を解決するのは質問者の義務ですが、回答者には 回答に対して責任もないですし(勿論間違ったことを言っていればコメントで指摘されますし、 マイナス評価を受けます)、解決する責任もないので。 絵文字に関しては絵文字だけでなく、質問文内に無駄な物を入れるべきでない、と言うことです。 残念ながらteratailは馴れ合いをするようなコミュニティではないですしね。
hoge111

2021/04/19 02:48

英語が出来た方がいいのはその通りだと思います。 英語が出来ないと時間がかかる。これもその通りだと思います。 「すぐに追記するべき」これもその通りだと思いますが、この質問の解答には30分程度で返信しています。また、今回の質問の主題は型同士の比較の安全性であって、設計がどうのこうのではないと考えたので、質問に追記はせず返信のみとしました。 回答者に解決する責任はない。 その通りだと思います。よく分からん質問にも丁寧に答えていただいて感謝しています。 無駄な物をいれるな これは以後気をつけたいと思います
hoge111

2021/04/19 02:50

あと、無職です。ごめんなさい
K_3578

2021/04/19 02:56 編集

少なくとも一人の回答者から追記して欲しい情報として出たならば、 第三者が見る場合を考え、追記するべきだということです。基本的にコメントは情報を追記するには 見づらい場所ですし。(MarkDown使えませんしね) >以降気をつけたい いつするかもわからない次の質問じゃなくて今から編集しましょうよ。 追記 >無職 ということは趣味か学習目的でしょうか。若しくは学生?何にせよ時間があるなら今のうちに勉強 しときましょう。プログラミングを仕事にするためにしてないとしたら別ですけど。
fana

2021/04/20 02:09

> 何やらtypeifやtype_infoは注意が必要だとか ここが本件の懸念事項なのでしょうから, どのような事柄について注意が必要だという話が存在したのか?等を明確に示すべきでは?
guest

回答2

0

自己解決

type_infoの==による比較はおそらく安全


基本的にコンパイラに依存するので注意
違うコンパイラで.name関数を呼ぶとわかる


今回の例示したコードもそうだが、特殊な場合を除いて頑張れば使わずに実装できる


またdynamic castvirtualを使っているなら複雑


計算量もコンパイラの実装に依存するので、遅い場合もある。


結論:テストするのが結構めんどくさいのであまり使わないのが吉


参考になりそうなurl

投稿2021/04/20 02:36

hoge111

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも論そういうのはシングルトンパターンによって解決されるべきなのでは・・・?

投稿2021/04/18 16:30

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoge111

2021/04/18 17:04 編集

class A B Cそれぞれをシングルトンにするということでしょうか???? 問題を再現する最小限のコードしか載せていないためアレなのですが、実際には ・class A B Cはunique_ptrで作られ削除もされる->動的なシングルトンが必要 ・class A B Cのコンストラクタには引数が数個ある ・class A B Cのメンバ関数は結構な頻度でアクセスする ・あんまりユーザ側に実装方法を強制させたくない(と言ってもこのライブラリを使うのは自分だけですが) といった次第であります 師匠????
yumetodo

2021/04/19 00:01

うーん・・・。なんだこのトリッキーな用例は。もうすこし全体的にそもそもなんでそんな制約がほしいのか教えて下さい。
hoge111

2021/04/20 06:39 編集

アプリのシーン管理をするライブラリを作っています ・class A B Cはunique_ptrで作られ削除もされる ->シーンは作成も削除もされます???? ・class A B Cのコンストラクタには引数が数個ある →引数にてシーンで使用するデータを渡します???? ・class A B Cのメンバ関数は結構な頻度でアクセスする →マイフレーム 描写する関数にアクセスします???? ------------
hoge111

2021/04/19 01:45 編集

同時に同じシーンが描写されることがあってはならないので、動的(?)かつ型被りのチェック機能が欲しいわけであります????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問