C++相談室 part159

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
2022/03/20(日) 23:38:16.04ID:UJahVNmy
パピコンでも喋るのに
2022/03/20(日) 23:46:10.52ID:1+CNf8az
流石にそのレベルの音声合成と一緒にしたら可哀想w
PCM音源がなかったので、FM音源でしゃべらせたり、beep音で音楽(単音・音量調整なし)鳴らしたり効果音出したりが当時の流儀w
2022/03/21(月) 01:56:07.23ID:TlR/Mg8q
ゲームアーツのソフトがFM音源でよく喋ってたわ
2022/03/21(月) 13:45:57.08ID:sqIPbQd/
C# - C++/CX - ネイティブC++
というふうに間に挟めば時としてマーシャリング規則がメドイP/Invokeからおさらばできる……!
ような気がする……!!
609デフォルトの名無しさん
垢版 |
2022/03/21(月) 13:48:08.86ID:ROKj/vns
どうも599です。
買った参考書の終わりの方にUWPでなんか作ろうって書いてあったのと、スマートポインタってなんかいいなって思って、そんでC++/CXかなって思いました。
そもそも言語の選び方もなんか間違ってたっぽいんですけど、なんか、
最速っていう響きに寄せられてなんか、c++すごそう・・・、っておもって続けてます。簡単なものでもなんでもいいからなんか作りなと知人に言われたので、とりあえず簡単なタイマー作ることにしました。
2022/03/21(月) 13:55:13.39ID:2Z4azz5I
>>608
そこはC++/CXじゃなくてC++/CLI。というかまさにそのために作られたのがC++/CLI
611デフォルトの名無しさん
垢版 |
2022/03/21(月) 14:01:07.93ID:ROKj/vns
今やっと昨日の質問の答えを見てきたんですけど、UWPやるのはやめといたほうがいいらしいですね。
VisualStudioでタイマー作ろうと思ったんですけどおすすめのテンプレートありますか?
2022/03/21(月) 14:05:11.38ID:sqIPbQd/
>>610
えっ
2022/03/21(月) 14:21:34.68ID:j56ex+kV
C++/CLIでコンパイルされたDLLはC#で書いたDLLと同じように利用できる
C++/CXは知らん

public ref class C{
public:
property System::String^ S1{
System::String^ get(){return _S1;}
void set(System::String^value){_S1=value;}
private:
System::String^ _S1;
}
};

class C{
string S1{get;set;}
}
2022/03/21(月) 14:23:46.00ID:TlR/Mg8q
cliはc#と変わらんからなあ
間に挟む意味はないよ
2022/03/21(月) 14:57:53.89ID:HCPaDxP+
delphiとc++が合体したような言語よの
2022/03/21(月) 18:13:19.47ID:BAdp3agq
嘘つくな・・・あとUWPならその名のついたスレに行け
C++/CLIはマネージドコードを混ぜられるネイティブコードってだけで、C++の大規模な「MS独自拡張」
これを更に拡張してUWP要素を載せたのがCX
C++じゃないんで、独自スレでも立てて一人で盛り上げてくださいw
個人的にはUWP自体がオワコンなので、せめてC#でやればいいのにとしか思えないがやるのは君の自由だw
2022/03/21(月) 18:22:20.19ID:OLHk6lmK
>>616
マネージド拡張と勘違いしてるんでは?
2022/03/21(月) 18:28:56.05ID:BAdp3agq
https://docs.microsoft.com/ja-jp/cpp/extensions/component-extensions-for-runtime-platforms?view=msvc-170
2022/03/21(月) 18:32:58.53ID:Prmlj1K5
今はC++もクロスプラットフォームに対応する時代ですよ
いきなりWindowsべったりの書き方を覚えるより簡単なコンソールアプリとかQtから始めるのをお勧めしておきます
2022/03/21(月) 18:37:45.51ID:BAdp3agq
どうせいつものVC++使うconstの話ばかりするおじさんの自演w
2022/03/21(月) 18:46:38.57ID:2xjgwrAK
MSの独自拡張ガーとか言われてもC++を世界に普及させたのはMSですからね。
2022/03/21(月) 18:55:58.33ID:TEVzcoXo
MFCのことかね?
2022/03/21(月) 19:30:28.04ID:RS8xXzlz
ユニコードのことか〜
2022/03/21(月) 19:33:36.97ID:zSyDDKWU
utf16 なんか消えて、utf32 と uft8 だけになればいいのに…
2022/03/21(月) 20:04:10.64ID:HCPaDxP+
J#が一番ワケワカランかった
2022/03/21(月) 22:37:44.93ID:dYQgVp3+
ちんちんシュッ!シュッ!シュッ!
2022/03/22(火) 08:04:59.19ID:jyd+b1no
なんでqmlって機能があるQtよりelectronが普及したのか
2022/03/22(火) 08:19:14.63ID:4wXemx3i
>>627
Qtはライセンスが面倒じゃない?
特にwindowsはよくわからん。
2022/03/22(火) 10:17:12.52ID:e045zQYf
>>619
プラットフォームをWindowsからQtに乗り換えるだけじゃ同じことじゃん
アプリから見てAPIでしかないんだから
2022/03/22(火) 10:31:07.58ID:OaCGWLhd
泥舟に乗り換えろと言われてもな。
2022/03/22(火) 10:46:04.30ID:mouTiTR6
共通プラットフォーム使うのは全然マシだと思いますよ
2022/03/22(火) 10:51:02.79ID:OaCGWLhd
Javaの失敗から何も学ばないのは馬鹿というものだ。
2022/03/22(火) 10:53:19.42ID:mouTiTR6
C++の失敗とかここで言われても
2022/03/22(火) 12:08:25.57ID:7HP7s9m4
じゃ鉄舟にのりかえるわ
2022/03/22(火) 12:48:01.28ID:BLG0uiz2
Win32で書いたソースコードそのままでスマホで動かせるんか?
2022/03/22(火) 12:59:12.46ID:BjxSmr6W
>>635
最近はARMで動くWindowsもあるよ。
2022/03/22(火) 13:03:45.42ID:e045zQYf
こういう質問、Windowsとスマホの用途の違いという根本を蒸ししているパターン多いよな
前提になっているパーツや環境だって違うのに「自分は移植作業したくない」

じゃあPGやめたらって話
2022/03/22(火) 13:04:16.00ID:e045zQYf
s/蒸し/無視/g
2022/03/22(火) 13:04:33.14ID:njeYgDdQ
>>636
MS も Windows phone から撤退したじゃん
2022/03/22(火) 13:31:47.44ID:1zUmccnl
Win32は「Windows」という環境依存定期
2022/03/22(火) 13:37:00.07ID:OaCGWLhd
処理系依存していいのかC/C++の最大のメリットだし。
2022/03/23(水) 11:56:26.96ID:I3LWr1Un
変なのキタ
https://ossia.io/posts/minimum-viable/
643デフォルトの名無しさん
垢版 |
2022/03/23(水) 13:08:39.58ID:AtA1Snji
>>642
構造体を入れ子にしてGUIノードツリーを表現するの面白いね
最近はXAML/FXML/HTMLなどXML派生言語でGUI構造を表現するものが多いけど、言語固有の構造体で表現するほうがパース・オーバーヘッドがなくていいのかな

まだ、ボタン押下時のコールバック(ハンドラー)など不明点が多い
644デフォルトの名無しさん
垢版 |
2022/03/23(水) 14:11:26.99ID:MxMb2yoX
```
void fuga() {}

auto hoge = fuga;

int main() {
std::cout << GetFuncName(hoge) << std::endl;
}
```

こんな感じのコードを書いたときに文字列で"fuga"を返してくれるようなGetFuncNameの実装方法ってありますか?
はじめは
#define GetFuncName(var) #var
とマクロを定義すれば良いかと思ったのですがこの定義でGetFuncName(hoge)とすると"hoge"が返ってきてしまいます...
2022/03/23(水) 14:25:09.91ID:KVWBweE9
実行時に動的に取るためにはどっかで入れてあげないと駄目ですなー
2022/03/23(水) 16:45:23.47ID:U3MPlBH2
ある比較関数
f = [](int l, int r){return l > r;};
があったとして、priority_queue<int> に f を渡したときと vector<int> を f で sort したときに両者の順番が異なるの非自明過ぎるのだが

なんで priority_queue の方はこれで昇順になるの?
2022/03/23(水) 16:49:02.84ID:nUwfSeaH
extern C declspec dlldxport 付けて、
実行時に自分自身をサーチすれば、付けた関数については
文字が残るから可能だけど、やるかと言われたら
まあ最悪一歩手前の方法やな...
2022/03/23(水) 17:47:41.73ID:Rq928qXu
enumの名前ほしがったり関数名ほしがったり
最初からC#使えばいいんですよ。
2022/03/23(水) 18:52:01.34ID:wWGNqGIP
C++erは速度厨なので名前を実行時解決するC#のリフレクションはあり得ない

C++23に入るかもしれない静的リフレクションを待ちましょう
https://cppmap.github.io/standardization/cppx/#_3
2022/03/23(水) 18:58:48.40ID:nUwfSeaH
静的リフレクションとか意味うっすw
リフレクション欲しいのは大抵自分自身が定義するものではないのに。
2022/03/23(水) 19:02:11.91ID:4wwS6ZaC
用途に応じてベターな手段を選ぶことができるとこまで整備されると
いいね
2022/03/23(水) 19:30:22.64ID:Rq928qXu
よくねーな。C++はとことん薄っぺらであるべき。
653デフォルトの名無しさん
垢版 |
2022/03/23(水) 19:48:39.65ID:BZjVj5dO
>>646
template <class T,
class Container = std::vector<T>,
class Compare = less<typename Container::value_type>>
class priority_queue

デフォルトはlessで<を定義して、降順にするのが元の意味

fで<の意味をひっくり返せば、昇順になる
2022/03/23(水) 20:10:07.72ID:8yKlU7lo
つーかリフレクションてコンパイル時に決定できない事を扱うから意味あるのに
性的に解決できることはリフレクションとしては意味がない
2022/03/23(水) 20:35:05.43ID:FjwJYdtM
>>649
速度厨? なにバカ言ってんだ
ハードソフトまで含めた全てのトータルバランスを追求するんだよ

そうじゃないおまえの眼がこの世界を正しく写せないだけだ
2022/03/23(水) 20:52:55.01ID:k8Z8CHR2
またマクロ/const/リフレクション/windowsおじさんが自演で暴れてるw
マクロ→廃止すべき
const→常識なので話題に挙げないべき
リフレクション→静的/手動なべき(というか動的にリンクされない限り、C++では不要)
windows→滅びるべき
なのでおじさん不要w
2022/03/23(水) 21:42:30.64ID:Rq928qXu
ATL使ってCOMで実装しなさい。
2022/03/23(水) 21:47:56.30ID:nUwfSeaH
COMとかWin用に大型アプリ提供してる会社しか
継続してないんじゃないか。
C#のCOMは簡単だし妙な記述皆無だから
まだ使ってる人居そうだが。
2022/03/23(水) 22:19:07.27ID:k8Z8CHR2
COM/DCOMの技術は良かったし、MSはときどきいい技術を作るんだけど、元の信用度が足りなくて普及しなくて失敗するw
COMやC++/CLI以降の話は正確にはC++じゃないので別スレでも作ってやれw
2022/03/23(水) 22:26:18.54ID:Rq928qXu
MSの信用が足りないとかCOMが普及しなくて失敗したとか釣り針でかすぎ。
井の中の蛙というか下水道のゴキブリ。社会に出たことがないのだろう。
2022/03/23(水) 23:17:30.63ID:k8Z8CHR2
釣りじゃねーよw
当時OMGのCORBA、JavaのRMI、MSのDCOMとかあったけど、全部潰れてSOAP一択になったろw
今じゃそれも廃れてRESTだけ残ってるw 井の中の蛙はお前w
2022/03/23(水) 23:26:20.36ID:e3uFLGnE
DCOMその他とCOMを同列に扱うな
2022/03/23(水) 23:37:17.78ID:k8Z8CHR2
ただのCOMなんて・・・w ActiveXと一部のコントロールで使われただけだろw 一言で言えばゴミw
2022/03/23(水) 23:48:22.86ID:Rq928qXu
釣りかと思ったらこいつガチの引きこもりやんw
2022/03/24(木) 00:06:11.51ID:1Vr2GJ3G
自己紹介乙w
ATLほんとに使ったことあんのか?w
俺はWin3.1のMFC/OLE時代からWindowsどっぷりで作りまくってたぞ
Java/.NET以降はWindowsあんまり触らなくなったけどなw
2022/03/24(木) 00:19:47.29ID:JVs5nwp2
今でもWindowsはcomの塊。IE、DirectX、Office全部comやで。
一太郎にExcelの表貼れるのも、vbscript、perlからExcel呼べるのも全部comのおかげ。
専ブラが一日で作れるのもcomのおかげ。

規格だけで実装では禄にオブジェクト間通信できなかったCORBAを
COMの対抗馬として本気で持ち出すあたりが無知で笑える。圧倒的MSの勝利。
2022/03/24(木) 01:01:10.28ID:1Vr2GJ3G
そりゃWindowsはOLE時代から使ってるから当たり前だろw
むしろ他で使われてなければ負けなんだよw
2022/03/24(木) 01:08:56.24ID:1Vr2GJ3G
あと普通にCORBAは結構実装されてんぞ
COMが他のプラットフォームで使われてんの見たことないし、MS以外のCOMもWindowsプラットフォームでも結構レアw
専ブラなんて今どき何で作るのか知らんが、普通ならElectronで書くだろうし、COMってIEコンポーネントで作るのか???w
バカも休み休み言えw
2022/03/24(木) 01:38:18.08ID:y95b8UUh
Electronだと外からの操作大変だしアプリへの組み込み難しくなるから(electronの中で戦う苦しい状態に)
普通はWebView2もってくんじゃないかな。
どんな独自アプリでもサクッと組み込めるっしょ。
2022/03/24(木) 02:15:16.69ID:1Vr2GJ3G
ないないw Electron超簡単だよw JS書けるだけでいいし、すごい面倒くさいよw 二重管理だからw
WebView2なんてほとんど使ってるやついないだろうし、何でも外からやらないといけないからすごい大変そうw
Webの画面を表示したいのでなければ俺なら絶対に使わないw
2022/03/24(木) 02:38:00.53ID:+RGleBjy
今はElectronより高速なTauriだな
2022/03/24(木) 02:39:48.55ID:1Vr2GJ3G
TauriとかWebView2よりないw
2022/03/24(木) 03:31:57.74ID:DeDdmrpu
Tauri>>>Electronで大方の勝負ついた感じだな
2022/03/24(木) 04:02:03.79ID:y95b8UUh
Electronて既存で出来上がってるアプリの一部、
一つのタブ内やパネル内に手軽に組み込めるの?
2022/03/24(木) 04:16:18.85ID:3pj9A089
WinRT は COM がベースだよ。
C++ から利用するなら旧来の API より使いやすいんだが、
WinRT もそれほど積極的に活用されてる感じはしないな。
2022/03/24(木) 04:28:29.36ID:1Vr2GJ3G
そこに気付くとはw
C++のままだからな
.NETにすると自動的に変換可能なCOMになるっていうw
2022/03/24(木) 04:39:56.11ID:3pj9A089
2022/03/24(木) 05:46:41.46ID:1Vr2GJ3G
.NETのアセンブリは元々publicなら設定によりCOM参照可能に出来る
https://docs.microsoft.com/ja-jp/dotnet/framework/interop/exposing-dotnet-components-to-com
WinRTは言語的な拡張なしに=C++のままで.NET(だけじゃないけどw)とinteractionするので、
https://en.wikipedia.org/wiki/C%2B%2B/WinRT
必然的にCOMになるよねって言っただけw
2022/03/24(木) 07:07:41.33ID:JVs5nwp2
> むしろ他で使われてなければ負けなんだよw

圧倒的シェアのWindowsではなく
ニッチ市場で使われないと負けという謎のオレオレルールw
2022/03/24(木) 07:22:11.34ID:s6VdVAhb
イキッてるくせにCOMがそもそも何のためにあるのかがわかってないやつが散見されるな
2022/03/24(木) 07:44:02.07ID:1Vr2GJ3G
そもそも論ならWindowsのコントロール間でデータを授受するための仕組みであるOLEの成れの果てだぞw
ただ最終的に目指していたのはDCOMで、プラットフォーム非依存、DLLヘルからの脱却/GUID(UUID)での識別/バージョン管理などのローカル諸問題解決を含む、RPCだよw
.NET以降は表立って出て来ない形になり、Windowsでカスタムコントロールを作ったりしない限り、言葉としてもほぼほぼ失われたものだと思ってるw
2022/03/24(木) 07:47:15.28ID:JVs5nwp2
> COMが他のプラットフォームで使われてんの見たことない

つ OpenVMS
2022/03/24(木) 07:55:15.79ID:1Vr2GJ3G
VAXは流石に名前しか知らんw マニアックすぎるだろw
Openになってからも興味ないし、Alphaチップマシンは使ったことあるけど、普通にWindows動いてたよw
2022/03/24(木) 08:11:46.86ID:s6VdVAhb
APIの提供形態ってだけ

APIで発行された要求を処理している何者かがどこにあろうがそういう問題じゃないし
他の類似するものと比べるのもナンセンス
VirualAllocとGETMAINを比べるような不毛な話だ
2022/03/24(木) 08:34:27.56ID:1Vr2GJ3G
そこでIBMとか・・・時代遅れにもほどがあるでしょ
なんでそんなどんどん話を逸していくの?
俺はDCOM的意味合いでしかCOMという用語を使ってないし、文脈的にはプラットフォーム非依存な話だと思ってたんだがw
2022/03/24(木) 09:33:43.04ID:JVs5nwp2
C++はオブジェクト思考言語で、COMやCORBAはオブジェクト間通信の技術で、
ネットワーク越し、異処理系間通信もできるからといってそれのみと限定するほうが謎。
しかもコケたCORBAはともかくCOMが普及せず失敗したとかMS-OfficeやWindowsは普及してないと言ってるようなもの。
OLEの成れの果てと言うが木を見て森を見ずというか、むしろ草を見て地球を見ずレベル。
2022/03/24(木) 13:52:17.42ID:TSqeyWkd
氷河期世代特有のMSアンチおっさんは放置しておけ
2022/03/24(木) 16:22:26.20ID:M4wmYApX
template引数によって関数の定義有無を変えたいのですが、そのようなことは可能でしょうか?

template<typename T>
class Test
{
public :

  FuncA(){ ・・・ }

  FuncB(){ ・・・ } ←Tがfloat型以外のときに定義するようにしたい
}
2022/03/24(木) 16:50:06.09ID:6Nkoi7KJ
>>687
Linuxとかに手を出して、ちょっとPCに詳しくなった気になってMSアンチになるやつはどの世代にもいるから安心しろw
2022/03/24(木) 17:02:11.79ID:RVLAMmSf
>>688
C++20の<concept>使えるなら

void FuncB()requires(!std::same_as<T,float>){...}
2022/03/24(木) 17:11:46.20ID:s6VdVAhb
conceptは要するにSFINAEだから
C++17ならこういけばいい

auto FuncB() -> std::enable_if_t<!std::is_same_v<T, float>, void> {}
692688
垢版 |
2022/03/24(木) 17:32:02.64ID:M4wmYApX
>>690-691
最近のC++ではそんなことが可能なんですね・・・!!
ありがとうございました!!
2022/03/24(木) 17:57:10.73ID:OAaMfHu2
あとは特化テンプレートとか
2022/03/24(木) 18:00:33.75ID:s6VdVAhb
最近のっつーかenable_ifはC++11から使えるぞ
695688
垢版 |
2022/03/24(木) 18:09:06.73ID:M4wmYApX
>>693-694
ありがとうございます!
2022/03/24(木) 18:09:14.56ID:RVLAMmSf
>>691
そのSFINAEはまずい
class Test<float>が実体化された時点でfuncBが実体化される
(funcBはtemplateではない)

実体化した時点でfuncBの返り値型がtemplate依存のenable_ifではなくなるためコンパイルエラーになる
2022/03/24(木) 19:35:07.28ID:1Vr2GJ3G
MSアンチはどの世代でも世界的に多いし、WindowsありきのOLEのような技術だけを指してCOMと言ってたら、Windowsの普及=MS Officeの普及=COMの普及になってしまうからなw
C++=OOP言語=RPCはCOM/CORBAというのは普通に自然w
Windowsだけで普及を語るのは正に草を見て地球を見ずレベルw
OSSなモノだと逆にWindowsだけ動かないという現象も日常茶飯事w それくらい嫌われているw

また部分だけで動かない例挙げて、メチャクチャになってるなw
ちゃんと動く例を挙げて、条件を明確にしとけw
_tとか_vとかもあれだしw
Windows坊やたちはこれだから・・・w

// C++11〜
#include <type_traits>
template<typename T> auto FuncB() -> typename std::enable_if<!std::is_same<T, float>::value, void>::type {}
int main() {
// FuncB(); // error: no matching function for call to ‘FuncB()’
// FuncB<float>(); // error: no matching function for call to ‘FuncB()’
FuncB<int>();
return 0;
}
2022/03/24(木) 22:24:41.52ID:eqpcVqC2
MSアンチというよりもMSの囲い込みが強引すぎて、他の環境を知ってしまうとMSから離れたくなるだけでは?
2022/03/24(木) 22:30:06.36ID:bdM8JANZ
どうしてもC++17以前でSFINAEでやんなきゃいけないなら無理矢理template依存にするしかない

ようこそ黒魔術の世界へ...

#include<type_traits>

template<class T>
class Test{
public:
template<int...dummy, typename std::enable_if<sizeof...(dummy)==sizeof...(dummy)&&!std::is_same<T,float>::value, int>::type = 0>
void funcB(){}
};
int main(){
Test<int> t1;
Test<float> t2;
t1.funcB();
//t2.funcB();
}
2022/03/24(木) 23:04:17.88ID:MDLggK/J
MSよりマックの囲い込みのほうが鼻につくと思うのは自分だけだろうか
2022/03/24(木) 23:13:46.53ID:1Vr2GJ3G
apple>>>MS>>>>>それ以外って感じの強さw
2022/03/24(木) 23:16:10.29ID:y95b8UUh
囲い込みの点ではハードから開発環境からストアに至るまでアップルは異常な囲い込み。
社外に対しては会社も各社員も殆ど貢献しねぇし。
アップルのためだけに請け負い会社潰しながら株価あげるため活動しとる。
2022/03/24(木) 23:27:03.23ID:k3BsWDgY
MSの囲い込みとか言ってるのは爺だけだろ
OSSにどんだけ貢献してると思ってるんだよ
2022/03/24(木) 23:44:46.04ID:1Vr2GJ3G
いやいやなんかWeb系のTypeScriptとかvscodeとかazureとかそういうのはいいんだよw
問題はWindows本体w
まともに動かないレベルのハードに未対応というのは分かるけど、どう見ても性能的に問題ないハードを対象外にしちゃうWindows11はどう考えてもやり過ぎw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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