C++相談室 part144

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/

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

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

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

----- テンプレ ここまで -----

0952デフォルトの名無しさん2019/09/10(火) 22:21:19.85ID:ER41jhKS
https://ideone.com/0A6NGs
こんなコード書いてみた。やはり戻り値を推定して関数分けてもらえない。
factory<int>の<int>を消したい。

0953デフォルトの名無しさん2019/09/10(火) 22:21:47.33ID:ER41jhKS
>>951
うろ覚えだから、間違ってたらそーりー。

0954デフォルトの名無しさん2019/09/10(火) 22:26:46.90ID:DP4nYdpK
んなめんどいことせんでも関数2つぐらい作って関数ポインタの配列に入れりゃいいだけだろ

0955デフォルトの名無しさん2019/09/10(火) 22:28:02.41ID:ER41jhKS
>>954
後学のために、コードみたいわ〜。

0956デフォルトの名無しさん2019/09/11(水) 00:05:28.08ID:NNlDJcv1
>>944
俺が見たのは、文字列からクラスのインスタンス作りたいだったから微妙に違う

0957デフォルトの名無しさん2019/09/11(水) 00:34:09.53ID:jCX5Zmm7
まあそれ用のレイヤ噛ますのが素直だよね
.netみたいなのがあればそれでいいし、CのGLibみたいなのもちょっと無理を感じなくもないがアリ

0958デフォルトの名無しさん2019/09/11(水) 01:04:41.71ID:Au6CJXG/
>>953
昔のC++では、確かに戻り値の型は同名関数の絞込みには使用されなかったよ。
今は知らない。

0959デフォルトの名無しさん2019/09/11(水) 01:17:18.25ID:xNhcwpCp
戻り値だけ違う関数を作りたきゃテンプレートを使え
以上

0960デフォルトの名無しさん2019/09/11(水) 01:57:43.22ID:TkJgDVYV
TypeHolderTypeがほしい。
リフレクションは23で入るそうな。

0961デフォルトの名無しさん2019/09/11(水) 07:00:09.68ID:KrQUVjgm
>>952
AからRを推定させたいっていことか?

0962デフォルトの名無しさん2019/09/11(水) 08:37:00.29ID:BcUfEF7y
リフレクションどうやって実装するんだろう・・
現行のC/C++とリンカの仕様と互換性たもったまま実装するのかなり難しそうだけど

0963デフォルトの名無しさん2019/09/11(水) 10:13:16.97ID:px+Xr7os
C++に不可能は無い

0964デフォルトの名無しさん2019/09/11(水) 10:17:36.03ID:4wA+sXag
>>963
不可能はあるよ
バカにC++を理解するのは不可能

0965デフォルトの名無しさん2019/09/11(水) 11:21:58.81ID:9WrJeA7f
structured bindingで定義した変数をラムダ式でキャプチャするとclang7はエラー、gcc7は通る。
いずれもc++17指定。
使用上正しいのはどっち?

const auto [a,b]=std::make_tuple(1.0,0.0);
auto f=[&](){
return a+b;
};

0966デフォルトの名無しさん2019/09/11(水) 11:39:01.09ID:KrQUVjgm
>>965
clangが正しい
N4713 8.5.4.2 Capturesの段落8にこう書いてある
If a lambda-expression explicitly captures an entity that is not odr-usable or captures a structured binding (explicitly or implicitly), the program is
ill-formed.

0967デフォルトの名無しさん2019/09/11(水) 11:49:32.96ID:9WrJeA7f
>>966
ありがと
この仕様の真意が理解できないが、そういう仕様では仕方ないな…

0968デフォルトの名無しさん2019/09/11(水) 12:07:20.16ID:KrQUVjgm
理由は俺もよくわからん

0969デフォルトの名無しさん2019/09/11(水) 12:13:22.75ID:9+CD8w/u
ちなみに [a,b] は、std::tie(a,b) と書くのと同じですか?
また、[a,b] はなんという名称(概念)ですか?

0970デフォルトの名無しさん2019/09/11(水) 12:26:12.95ID:9+CD8w/u
>>969
自己レスですが、[a,b] は、これですか:
https://en.cppreference.com/w/cpp/language/structured_binding
↑Structured binding declaration (since C++17)

int a[2] = {1,2};
auto [x,y] = a; // creates e[2], copies a into e, then x refers to e[0], y refers to e[1]
auto& [xr, yr] = a; // xr refers to a[0], yr refers to a[1]

0971デフォルトの名無しさん2019/09/11(水) 13:04:41.28ID:9WrJeA7f
>>969
tieでは事前に定義した変数に代入することになるじゃん
つーことはconst変数にできない

0972デフォルトの名無しさん2019/09/11(水) 13:05:15.41ID:9WrJeA7f
>>970
それ

0973デフォルトの名無しさん2019/09/11(水) 13:05:17.06ID:zFEVPQj4
tieは良くないmaketuple使え

0974デフォルトの名無しさん2019/09/11(水) 13:28:34.92ID:9WrJeA7f
>>973
ズレてるよ

0975デフォルトの名無しさん2019/09/11(水) 13:46:37.79ID:TkJgDVYV
>>961
decltype(auto) f(){} ができればよいのだけどね。

0976デフォルトの名無しさん2019/09/11(水) 20:20:32.38ID:jgB/KG+a
Aクラスを継承したテンプレートで型を指定したメンバー変数cを持つ、Bクラスがある。

BクラスをキャストしたAポインタ仮想メソッド使ってBのメンバー変数cを取得したいんだけど、ダウンキャストしかないかね?

class A{};

template<typename _T>
class B : pubulic A{ pubulic : _T c;}

A *a = new B<int>;

int ret = A->???;

0977デフォルトの名無しさん2019/09/11(水) 20:23:28.97ID:xNhcwpCp
> A *a = new B<int>;

なぜ?

0978デフォルトの名無しさん2019/09/11(水) 20:25:26.05ID:xNhcwpCp
BのインスタンスをAにアップキャストした時点でAにないメンバは破棄されるのでAのポインタからcにアクセスすることはできない

0979デフォルトの名無しさん2019/09/11(水) 20:26:04.31ID:jgB/KG+a
いろんな型をリスト化する為です。
実際はAポインタの配列

0980デフォルトの名無しさん2019/09/11(水) 20:29:39.70ID:TkJgDVYV
TypeHolderTypeがほしいのじゃーーーーー!!!

0981デフォルトの名無しさん2019/09/11(水) 21:01:04.58ID:QpQ1AfFp
cにアクセスしたい人はBを知ってるんだから、ダウンキャストでもなんでもやりゃぁええがな。

0982デフォルトの名無しさん2019/09/11(水) 21:04:08.52ID:k/thmV8R
variantなりanyなり使えば

0983デフォルトの名無しさん2019/09/11(水) 22:53:28.56ID:DdLw5bDK
>>976
つーかダウンキャストじゃ何の不満が?

0984デフォルトの名無しさん2019/09/11(水) 23:37:41.00ID:dX8mKe9q
型の意味なしだろそれ

0985デフォルトの名無しさん2019/09/12(木) 00:03:44.43ID:2pi0Y8A7
ダウンキャストより先にテンプレートメソッドパターンを検討してみては?

0986デフォルトの名無しさん2019/09/12(木) 00:30:21.07ID:ikyWh7fv
>>984
それってどれよ

0987デフォルトの名無しさん2019/09/12(木) 01:15:25.34ID:t/6lHRNc

0988デフォルトの名無しさん2019/09/12(木) 07:02:09.27ID:7HqgwkVj
>>976
class A {
public:
virtual void func(void *) = 0;
};

0989デフォルトの名無しさん2019/09/12(木) 07:11:59.50ID:fOl/Q6Ej
anyじゃんそれ。

0990デフォルトの名無しさん2019/09/12(木) 07:21:48.35ID:guoHOxyl
型を無意味にするなんてとんでもない!

0991デフォルトの名無しさん2019/09/12(木) 07:24:41.60ID:7HqgwkVj
ダウンキャストの必要が出てきたらvirtualで何とかならんか考えれ

0992デフォルトの名無しさん2019/09/12(木) 07:27:47.36ID:ikyWh7fv
AとBだけじゃなくてどうせAの派生クラスはCやらDやらあってそれらもA*で扱うんでしょ。
ホントの型の判別やって型に応じて処理するんだろうしダウンキャストでええがな

0993デフォルトの名無しさん2019/09/12(木) 08:25:32.31ID:Ni5TNCQb
それって欲しいのはunionてことじゃね?
それかAにすべてのメンバ乗せたらええやん。

0994デフォルトの名無しさん2019/09/12(木) 10:13:00.88ID:/QY4HS1k
そもそもごった煮リストにすることが誤り

0995デフォルトの名無しさん2019/09/12(木) 10:18:31.65ID:7HqgwkVj
excelみたいなことをするなと?

0996デフォルトの名無しさん2019/09/12(木) 15:18:39.72ID:W8pItA9j
コンパイル時に自身のソースコード解析してリフレクション作ることとかできないですか?

0997デフォルトの名無しさん2019/09/12(木) 15:50:08.39ID:Cr8f/Gnu
それはコンパイラ作ってるのに等しい

0998デフォルトの名無しさん2019/09/12(木) 18:08:13.67ID:WsH5tdUK
別の言語でやればいいじゃん

0999デフォルトの名無しさん2019/09/13(金) 12:32:55.83ID:+6+n/onN
>>988
そんなことやっても結局正体を知った上での個別処理になるわけだから
素直にダウンキャストしとけと

1000デフォルトの名無しさん2019/09/13(金) 12:54:06.04ID:/ygW08Jq
vtableがあればdynamic_castもできるのに何でダウンキャストなんだ?

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 52日 23時間 35分 31秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。