C++相談室 part144
レス数が1000を超えています。これ以上書き込みはできません。
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/ (日本語)
----- テンプレ ここまで ----- https://ideone.com/0A6NGs
こんなコード書いてみた。やはり戻り値を推定して関数分けてもらえない。
factory<int>の<int>を消したい。 >>951
うろ覚えだから、間違ってたらそーりー。 んなめんどいことせんでも関数2つぐらい作って関数ポインタの配列に入れりゃいいだけだろ >>944
俺が見たのは、文字列からクラスのインスタンス作りたいだったから微妙に違う まあそれ用のレイヤ噛ますのが素直だよね
.netみたいなのがあればそれでいいし、CのGLibみたいなのもちょっと無理を感じなくもないがアリ >>953
昔のC++では、確かに戻り値の型は同名関数の絞込みには使用されなかったよ。
今は知らない。 戻り値だけ違う関数を作りたきゃテンプレートを使え
以上 TypeHolderTypeがほしい。
リフレクションは23で入るそうな。 リフレクションどうやって実装するんだろう・・
現行のC/C++とリンカの仕様と互換性たもったまま実装するのかなり難しそうだけど >>963
不可能はあるよ
バカにC++を理解するのは不可能 structured bindingで定義した変数をラムダ式でキャプチャするとclang7はエラー、gcc7は通る。
いずれもc++17指定。
使用上正しいのはどっち?
const auto [a,b]=std::make_tuple(1.0,0.0);
auto f=[&](){
return a+b;
}; >>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. >>966
ありがと
この仕様の真意が理解できないが、そういう仕様では仕方ないな… ちなみに [a,b] は、std::tie(a,b) と書くのと同じですか?
また、[a,b] はなんという名称(概念)ですか? >>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] >>969
tieでは事前に定義した変数に代入することになるじゃん
つーことはconst変数にできない >>961
decltype(auto) f(){} ができればよいのだけどね。 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->???; BのインスタンスをAにアップキャストした時点でAにないメンバは破棄されるのでAのポインタからcにアクセスすることはできない いろんな型をリスト化する為です。
実際はAポインタの配列 TypeHolderTypeがほしいのじゃーーーーー!!! cにアクセスしたい人はBを知ってるんだから、ダウンキャストでもなんでもやりゃぁええがな。 ダウンキャストより先にテンプレートメソッドパターンを検討してみては? >>976
class A {
public:
virtual void func(void *) = 0;
}; ダウンキャストの必要が出てきたらvirtualで何とかならんか考えれ AとBだけじゃなくてどうせAの派生クラスはCやらDやらあってそれらもA*で扱うんでしょ。
ホントの型の判別やって型に応じて処理するんだろうしダウンキャストでええがな それって欲しいのはunionてことじゃね?
それかAにすべてのメンバ乗せたらええやん。 コンパイル時に自身のソースコード解析してリフレクション作ることとかできないですか? >>988
そんなことやっても結局正体を知った上での個別処理になるわけだから
素直にダウンキャストしとけと vtableがあればdynamic_castもできるのに何でダウンキャストなんだ? このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 52日 23時間 35分 31秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。