◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part162


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1667194175/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1sage (ワッチョイ fbf0-ofdD)2022/10/31(月) 14:29:35.57ID:J5sgTSch0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part161
http://2chb.net/r/tech/1653135809/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2デフォルトの名無しさん (ワッチョイ d9f0-ofdD)2022/10/31(月) 17:11:42.28ID:FSs0hrWX0
保守です

3デフォルトの名無しさん (スップ Sd73-OvbD)2022/11/01(火) 07:31:00.75ID:8mAHYLmxd
寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末食う寝る処に住む処藪ら柑子の藪柑子パイポパイポ パイポのシューリンガンシューリンガンのグーリンダイグーリンダイのポンポコピーのポンポコナーの長久命の長助

4デフォルトの名無しさん (スップ Sd73-pLSs)2022/11/01(火) 12:22:19.23ID:LNKvo44sd
今更話すことある?

5デフォルトの名無しさん (ワッチョイ 79c2-iO6U)2022/11/03(木) 09:15:40.37ID:AvIGv7Uk0
template <template<class...> class T>
struct is_map : std::false_type { };

template<> struct is_map<std::map> : std::true_type { };
template<> struct is_map<std::multimap> : std::true_type { };
template<> struct is_map<std::unordered_map> : std::true_type { };
template<> struct is_map<std::unordered_multimap> : std::true_type { };

template <template<class...> class T>
concept map_t = is_map<T>::value;

template <template<class...> map_t MAP, class... ARGS> //C3339
void test(MAP<ARGS...>&&) {}

うーん、困った
どうしよう。。。

6デフォルトの名無しさん (ワッチョイ 917c-T8wd)2022/11/03(木) 10:13:40.98ID:GMyBvZ220
requires map_t<MAP>でええやん

7デフォルトの名無しさん (ワッチョイ 79c2-iO6U)2022/11/03(木) 10:30:49.88ID:AvIGv7Uk0
あ、そっか
㌧x

一応、報告
template <template<class...> class MAP, class... ARGS> requires map_t<MAP> //OK
void test(MAP<ARGS...>&&) {}

8デフォルトの名無しさん (ワッチョイ 0bda-PhZD)2022/11/03(木) 18:33:03.71ID:A3AnwOcy0
テンプレートにテンプレート重ねて滅茶苦茶する典型

9デフォルトの名無しさん (ワッチョイ 917c-T8wd)2022/11/03(木) 20:41:25.83ID:GMyBvZ220
AssociativeContainer要件のコンセプトは標準ライブラリには無いんだな
規格上定義してるrequirementは一通り作っとけばいいのに

10デフォルトの名無しさん (ワッチョイ 13a5-T+yX)2022/11/03(木) 22:05:17.66ID:f0rgVbxY0
>>8
でも文法的コンパイラ的には許されている
100段くらい重ねて大丈夫なんじゃなかろうか

11はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b3e-Tk+f)2022/11/03(木) 22:28:39.04ID:b1nVlp4p0
>>10
コンパイラが無限のリソースを使えるわけじゃないから制限があってもいいし、
わかっている制限は文書化するべきということになっている。
https://timsong-cpp.github.io/cppwp/n3337/implimits

言語仕様の側でもどの程度まで処理すべきかという最低限の数値は与えていて
この場合だと
Recursively nested template instantiations [1024].
ってのが当てはまる。
あくまでもガイドラインなのでこれ以下に制限された処理系がないとは言えないんだけど、
1024 が提示されているところで 100 やそこらに制限するような処理系はたぶんあんまりないとは期待できると思う。

12デフォルトの名無しさん (ワッチョイ 79c2-iO6U)2022/11/04(金) 14:22:03.44ID:MccBwaps0
そんなん言い出したら自動変数は合計何バイトまでとか
しょーもないことを規格票に書くハメにならないか?

13デフォルトの名無しさん (ワッチョイ 8901-T+yX)2022/11/04(金) 14:28:53.41ID:I5Ua2kB10
GCCとClangの -ftemplate-depth-?? の話?

14デフォルトの名無しさん (スッップ Sd33-pLSs)2022/11/04(金) 15:45:10.91ID:nV9i8Ccmd
昔は17だったなその制限

15デフォルトの名無しさん (ワッチョイ 79c2-iO6U)2022/11/04(金) 16:29:55.40ID:MccBwaps0
つーかよ
俺5だけど、あの程度のことで
8みたいなこと言われたのずっこけてる

別に無駄に複雑化はしてないし裏技も使ってない
当たり前の書き方で目的を素直に書いてるだけなのに

一次テンプレートと特殊化でis_系のクエリーを作って
それでコンセプト作って使おうとしただけだぜ?
何があかんの?

テンプレートテンプレート仮引数がわからんだけじゃないのかって邪推しちまいそう

16デフォルトの名無しさん (スッップ Sd33-pLSs)2022/11/04(金) 16:49:46.97ID:nV9i8Ccmd
全然あかんくないと思うよ
8がアホなだけ

17デフォルトの名無しさん (ワッチョイ 8901-T+yX)2022/11/04(金) 18:04:41.45ID:I5Ua2kB10
話は綺麗に終わってるのに
発展的に関連した話題を振るのならともかく
何で>>8みたいなコメントをいちいち付けるのか俺も理解不能

18デフォルトの名無しさん (ワッチョイ 8901-T+yX)2022/11/04(金) 18:07:42.31ID:I5Ua2kB10
>>14
そうそう昔はこれを付けないで17超えるとエラーが出てた
-ftemplate-depth-100 くらいで使ってたけど
いまはデフォルトで1024になってるのね

19はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b3e-Tk+f)2022/11/04(金) 19:44:51.78ID:lXYNWX4U0
制限はあくまでも「深さ」であって「回数」ではないので上手いこと変形するのも技の内だったんだよな……。
遊びでやるならきつめの制限も楽しいんだけどね。

20デフォルトの名無しさん (ワッチョイ f61f-0tFf)2022/11/05(土) 15:23:46.47ID:6woT7hPv0
自動的に解釈されるテンプレート引数で
値渡しじゃなく参照渡しと解釈させる方法ってありますかね?

21デフォルトの名無しさん (スフッ Sdb2-hVB7)2022/11/05(土) 15:33:58.60ID:95t5abQGd
std::ref
std::cref

22デフォルトの名無しさん (ワッチョイ f61f-0tFf)2022/11/05(土) 15:40:28.55ID:6woT7hPv0
あるんですねぇ
ありがとうございます

23デフォルトの名無しさん (テテンテンテン MM96-REjG)2022/11/07(月) 14:57:30.80ID:8LbwGvMzM
明示的な型変換が可能か調べる方法ってありますか?
暗黙的ならis_convertibleが使えるのですが…

std::is_convertible<std::shared_ptr<void>, bool>::value; // trueになってほしい

24デフォルトの名無しさん (スッップ Sdb2-oy7h)2022/11/07(月) 16:58:07.91ID:2UaeFBkad
is_constructibleを使う

25デフォルトの名無しさん (テテンテンテン MM96-REjG)2022/11/07(月) 17:32:26.98ID:unROdsfFM
>>23
std::is_constructible<bool, std::shared_ptr<void>>::value

ありがとうございました。

26デフォルトの名無しさん (テテンテンテン MM96-REjG)2022/11/07(月) 17:32:50.90ID:unROdsfFM
>>24
ありがとうございました。

27デフォルトの名無しさん (ササクッテロロ Sp79-uppo)2022/11/09(水) 10:37:27.83ID:uQIa4jnTp
質問です
マネージドとかアンマネージドとかMSの呪いですか?

28デフォルトの名無しさん (オイコラミネオ MM91-wgF3)2022/11/09(水) 11:23:16.37ID:GzNJb2MKM
プログラミング言語 C++ [第四版]
BJARNE STROUSTRUP, 柴田望洋 訳
「第四章 C++を探検しよう:コンテナとアルゴリズム」のp.102-103
に以下の様なコードが有るのですが、phone_book = の右側の初期化子(?)
の部分をコンパイラ内部でどのように翻訳(解釈)していくのかの厳密な詳細が
分かりませんので、どなたか教えてもらえませんか。
struct Entry {
 string name;
 int number;
};
vector<Entty> phone_book = {
 {"David Hyme",123456},
 {"Karl Popper",234567},
 {"Bertrand Arthur William Russell",2345678}
};
前提として、クラステンプレート vector<T> には、以下のような
「初期化子並びコンストラクタ」があることとします。
template <class T, class Alloc = allocator<T>>
class vector {
・・・
 // 初期化子並びコンストラクタ :
 vector( std::initializer_list<T> a );
・・・
}
ここで問題となるのは、以下のどちらの方法で解釈されているかということです。
[続く]

29デフォルトの名無しさん (オイコラミネオ MM91-wgF3)2022/11/09(水) 11:24:30.65ID:GzNJb2MKM
>>28
[続き]
(1) {・・・}を翻訳した後に、コンストラクタを探す。

phone_book = の右側の部分は、コンパイラ内部で、いったん
std::initializer_list<UUU>型のオブジェクトに直される
(なお、UUU がどんな型かは不明)。
vector<Entry>クラスの中にたまたま「初期化子並びコンストラクタ」
vector( std::initializer_list<Entry> )を見つけて
initializer_list<UUU>をinitializer_list<Entry>に変換してから、
vector( std::initializer_list<Entry> )に渡す。

(2) コンストラクタを見つけた後に、{・・・}を翻訳する。

vector<Entty>クラスの中にコンストラクタを探して、
vector( std::initializer_list<Entry> ) があることを発見。
このコンストラクタの引数が、std::initializer_list<Entry>であることから、
phone_book = の右側の部分を、std::initializer_list<Entry> だと
思って、コンパイル(意味論的に解釈)する。

# 推定ですが、(1)だと上手く行かない気がします。
[続く]

30デフォルトの名無しさん (オイコラミネオ MM91-wgF3)2022/11/09(水) 11:25:24.81ID:GzNJb2MKM
>>29
[続き]
[自分なりに調べたこと]
[A] p.293. 11.3 「並び」によれば、
{}構文は、名前付き変数を初期化する(§6.3.5.2)だけでなく、
(すべてではないものの)多くの箇所で式として利用できる。その構文は、
以下の二種類だ:
[1] T{...}:型で修飾された形式。"T型のオブジェクトを作成してT{...}で初期化
する"ことを意味する。§11.3.2。
[2] {...}: 型で修飾されていない形式。利用している文脈に基いて型を
決定できる必要がある。§11.3.3。
# auto以外では{}内の要素の型は推論に利用「されない」」らしい。p.297

[B] p.327によると、
「{}で囲んだ並びは、以下のものに対する引数として利用できる:
[1] std::initializer_list<T>型。並びの中の要素の値は、
  暗黙理にTへと変換される。
[2] 並びの中に与えられている値で初期化可能な型
[3] Tの配列への参照。並びの中の要素の値は、暗黙裡にTへと変換される。

31デフォルトの名無しさん (ワッチョイ f57c-q4d/)2022/11/09(水) 16:50:18.10ID:XEaxVtCg0
大体わかってそうだけど
{…}をinitializer_list<Entry>として解釈しようと試みる→中身の{"David Hyme",123456}とかをEntry型に暗黙変換しようと試みる→全部変換できれば成功
Entryがexplicit Entry(string, int);を持ってると暗黙変換できなくて失敗するようになる


lud20221109231037
このスレへの固定リンク: http://5chb.net/r/tech/1667194175/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 
  ↓この板の人気?スレ↓(一覧)
 
JavaScriptというやつを学びたい
文字コード総合スレ part14
GAS 教えて
【まず1嫁】くだすれPython(超初心者用) その53
もうUnixで開発なんかしたくない!COBOLなんて嫌だ
無知な者ですが、オススメを教えて
jQuery,.js
【最強CUI】PowerShell -Part 1
【.cmd】 バッチファイルスクリプト %11 【.bat】
おまいらがワイにC++を1から教えるスレ
Win32API質問箱 Build127
次世代言語14 Elixir Crystal Julia Rust Swift
プログラミングしているときの思考ついて話そうぜ
fish POSIX以外のシェルスクリプト総合 xonsh
java初めて少し経ちましたが
C++相談室 part158
VisualBasic6.0 対 VisualBasic .NET 2003
プログラミング初心者なんだけど、、、
bccのコンパイルができない
結局C++とRustってどっちが良いの?
TRONをPC用OSに改造するから手伝って!
Visual Studio 2015 Part5
Visual Studio 2010 Part19
[RPA]PC自動化技術総合スレ[効率化] Part.8
Visual Studio Code / VSCode Part15
【えっ】Perlに未来はあるのか?【終わり?】
Microsoft Xamarin part8 [.NET MAUI]
関数型プログラミング言語Haskell Part32
chromeのスプレッドシートについて質問
15:36:13 up 7 days, 5:58, 0 users, load average: 163.94, 230.11, 245.69

in 0.0031750202178955 sec @[email protected] on 103004