C++相談室 part161

レス数が1000を超えています。これ以上書き込みはできません。
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
981デフォルトの名無しさん
垢版 |
2022/10/26(水) 09:39:06.48ID:8n8wOLOb
>>968
やはりrequiresを1行足すしかないか...

template<allow_ref<std::integral> T>
void func(T&&);

とでも書きたかったけど、コンセプトを受け取るテンプレートが書けないっぽいから諦めた
2022/10/27(木) 02:01:40.47ID:XIiqnbUh
clangのソースで、CPUのマシン語を生成している場所を調べていて、
X86AsmPrinter クラスや X86MCInstLower クラスがそれに強く関与していることが分かって
きました。
X86AsmPrinter クラスや X86MCInstLower クラスは、お互いに参照されてますが、
この2つのクラスは、いずれも「作られている場所」が見つかりません。
「作られている」とは、new X86AsmPrinter や、X86AsmPrinter a;、
new X86MCInstLower や X86MCInstLower b; のようにしている場所です。
どなたか分かりませんか?
2022/10/27(木) 02:32:01.95ID:XIiqnbUh
>>982
すみません、多分、以下の部分ですね。
これで、new X86AsmPrinterしたアドレスを、getTheX86_32Target()やgetTheX86_64Target()
が返した Target クラスのシングルトンのインスタンス xxx に対して
xxx.AsmPrinterCtorFn = アドレス;
のように記録しているようです。

extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeX86AsmPrinter() {
RegisterAsmPrinter<X86AsmPrinter> X(getTheX86_32Target());
RegisterAsmPrinter<X86AsmPrinter> Y(getTheX86_64Target());
}

template <class AsmPrinterImpl> struct RegisterAsmPrinter {
RegisterAsmPrinter(Target &T) {
TargetRegistry::RegisterAsmPrinter(T, &Allocator);
}
private:
static AsmPrinter *Allocator(TargetMachine &TM,
std::unique_ptr<MCStreamer> &&Streamer) {
return new AsmPrinterImpl(TM, std::move(Streamer));
}
};
/// TargetRegistry - Generic interface to target specific features.
struct TargetRegistry {
・・・
static void RegisterAsmPrinter(Target &T, Target::AsmPrinterCtorTy Fn) {
T.AsmPrinterCtorFn = Fn;
}
・・・
};
2022/10/27(木) 02:43:40.35ID:InDGsMhW
なんかコンセプト以前にテンプレートにもあまり慣れてなさそう
2022/10/27(木) 02:44:18.56ID:XIiqnbUh
間違えました。
xxx.AsmPrinterCtorFn に登録しているのは、new X86AsmPrinterの
アドレスではなく、
RegisterAsmPrinter<X86AsmPrinter>::Allocator(・・・)
のアドレスのようですね。
そして、このAllocator (==関数)を呼び出すと、new X86AsmPrinter
を行なえるようです。
2022/10/27(木) 08:37:49.38ID:yP/aIJbf
関係ないけどあんまりnewせんほうがええよ
それしかないと思ってるならちょっと古い感じ
2022/10/27(木) 22:03:08.74ID:+UGgATct
あんまりデータメンバに直アクセスしないほうがええよ
あんまりグローバル変数使わんほうがええよ
あんまりSendMessageを直に使わんほうがええよ
あんまりナマポ使わんほうがええよ
あんまりアセンブラ使わんほうがええよ
あんまりC++使わんほうがええよ

ラップしろってことだろうけど
一切離れたやつはもうC++使いじゃない
2022/10/28(金) 00:40:37.68ID:sQHy7sst
>>986
イリノイ大学のclangやLLVMの開発者に言ってください。
コンパイラでは最先端かも知れませんが。
2022/10/28(金) 08:56:31.64ID:+oOKe7Yr
可変長テンプレートはじみて使ったけど便利だなこれ
2022/10/28(金) 09:06:12.57ID:kPJo8naK
threadがあんなに使いやすくなっているのは
ひとえにtemplate-parameter-packのおかげ
2022/10/29(土) 23:34:49.08ID:Ank2ZEY0
>>950の話は終わりかな?
レスついたけど反論がないようだけど
2022/10/30(日) 03:51:06.75ID:i1fpLCEI
5ch始めたばかりなのかな?
2022/10/30(日) 11:42:15.05ID:/mJPvv5N
気になるじゃん
2022/10/30(日) 15:52:08.41ID:zpZIwFpu
仕事ハネた後のヨレヨレ状態で見てるから
長文()を読もうとすると寝落ちしかねない
995デフォルトの名無しさん
垢版 |
2022/10/31(月) 13:27:29.89ID:Q1JWQuIa
VC++ や GCC で <cstddef> をインクルードすると、
std の明⽰的修飾、using 宣言、using 指令がなくても
size_t が使えるのですが、これは C++ 標準の仕様ですか?
2022/10/31(月) 13:53:23.25ID:HpV/6ZOj
>>995
いいえ。 未規定です。
std 名前空間内で定義されることは当然に保証された動作ですが、
グローバルには定義されてもされなくてもかまいません。
逆に言えばグローバルに定義されていることはありうると想定する必要があります。
(なので自分が定義する名前がそれに衝突しないようにするべきです。)
2022/10/31(月) 13:55:26.92ID:cQbFxG4K
size_tを知らんでもsizeofは使える?
2022/10/31(月) 14:17:38.34ID:HpV/6ZOj
>>996 の根拠
https://timsong-cpp.github.io/cppwp/n3337/headers#4
2022/10/31(月) 14:31:14.54ID:J5sgTSch
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
2022/10/31(月) 14:31:53.89ID:J5sgTSch
立てました
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 162日 17時間 8分 25秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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