18/12/13 22:22:08.57 JDKMBsk/.net
URLリンク(ideone.com)
VisualStudioCommunity2017 ver15.9.4でこのコードをビルドすると
「error C2440: '<function-style-cast>': 'int' から 'Lit' に変換できません。」
というエラーが10行目で出るんだけど、何が悪いんだろうか。
1021:デフォルトの名無しさん
18/12/14 01:28:14.98 l0obV/M9.net
Parser() { reg(Lit{ 1 }); } → Parser() { ::reg(Lit{ 1 }); }
コレでいける
理由は知らん
1022:デフォルトの名無しさん
18/12/14 05:31:56.42 Op4CRLIg.net
ありがとう
この方法で凌ぐことにします
1023:デフォルトの名無しさん
18/12/27 10:14:18.41 aMHl4+JJ.net
ubuntuで日本語含むファイル名を操作したいのでwoendirとかないのか探したんだけど見つからず、
wchar_tでファイル名処理した場合、いちいちmbstiwcsで変換するしかないの?
1024:デフォルトの名無しさん
18/12/27 10:19:33.81 0qVX2+Xi.net
変換出来ない文字はどうすんの?
1025:デフォルトの名無しさん
18/12/27 10:37:38.48 aMHl4+JJ.net
こっちが聞きたいんだけど
1026:さまよえる蟻人間
18/12/27 11:58:06.85 xEoyai35.net
>>985
UTF-8でいいんとちゃう?
1027:デフォルトの名無しさん
18/12/27 12:49:46.03 aMHl4+JJ.net
utf8のままどーやってopendirするのさ?
それができないから困ってるのに
DIR *dir = opendir("hogehoge");
struct dirent *dp;
dp=readdir(dir);
としたとき,dp->d_nameに入ってるファイル名ってのはcharだよね
このファイル名に手を加えようとする(renameとか)と、utf8の場合、いったんmbstowcsでwchar_tにでもコピーするとか、
wstringにでもコピーしないと文字コードと格闘する羽目になるよね。
もし、
wDIR *wdir = woprndir(L"hogehoge");
struct wdirent *wdp;
wdp = wreaaddir(wdir);
とかできればsonomama
wdp->d_nameはwcha_tなので文字の先頭バイト見て何文字なのか判断するなんて余計な操作しなくて済むと思ったわけ。
1028:デフォルトの名無しさん
18/12/27 13:00:04.82 aMHl4+JJ.net
bashで
for i in *; do
$newname=`echo $i| myprogram`
mv $i $newname
done
で済ませてたんだけど、myprogramの方は単に文字処理だけで、
置換とか文字列削除とかややこしいところはwstringに変換してた。
bashに任せてたディレクトリオープンや、ファイル操作までC/C++でやらせようとなると、
再度wcstombsとか余計なコピーが必要になってなんだか思いっきり損してる気分になったので、
なんかほかの手がないものかと?
1029:デフォルトの名無しさん
18/12/27 13:49:46.07 SzdNjvIa.net
>>989
utf8 を wchar_t* に入れるのはただのアホやろ
1030:さまよえる蟻人間
18/12/27 14:18:03.70 e6FVPdkR.net
次スレよろ
1031:デフォルトの名無しさん
18/12/27 15:25:53.05 X03Q+yv7.net
setlocale(LANG, "ja_JP.UTF-8");
setlocale(LC_CTYPE, "ja_JP.UTF-8");
char* utf8 -> mbstowcs -> wchar_t* wcs
wchar_t* wcs -> wcstombs -> char* utf8
URLリンク(docs.microsoft.com)
URLリンク(mgng.mugbum.info)
1032:デフォルトの名無しさん
18/12/27 17:54:58.01 o7TBUkJP.net
無責任なこと書くけど、
Linuxならmountコマンドにオプション加えれば
ファイル名の文字コードをうまいこと透過的に変換してくれんか?
ファイルの実体に手を触れずにファイル名のコード系だけ変えたいなら、
struct dirent の d_name のバイト列をどう解釈するかの問題で、
ロケール関係ない話になりそうだし。
1033:デフォルトの名無しさん
18/12/27 18:18:35.29 q3Cty4J1.net
プロセス側から見たらふつうそれもlocaleに従うんじゃね?
1034:さまよえる蟻人間
18/12/27 23:19:26.01 xEoyai35.net
次スレ立てないとお仕置きしちゃうぜ。
1035:デフォルトの名無しさん
18/12/28 01:33:23.72 qtS4fp6w.net
>>991
それは違うだろ
ファイル名をcharに入れてregex_replaceあたりの正規表現で再びcharに入れる場合はともかく
全角半角変換みたいに文字コードそのものをいじりたい場合はwchar_tに入れるだろ
全角文字コード -= '!'-'!'
みたいな変換しようすれば
char *pBuf = Bufとして、
*pBufの値に応じて
((*pBuf<<16) +(pBuf[1]<<8)+(pBuf[2] )&(0x00ffff
みたいなバイトの組み立てが必要になるじゃん
*pBufの文字コードに応じて
pBuf +=3だのpBuf++だのインクリメント幅の調整も要るし
いったんwcha_tに入れるのは何も間違ってないと思うが
1036:デフォルトの名無しさん
18/12/28 02:13:55.81 qtS4fp6w.net
シェルからファイル名をfgetwsで受け取ってるうちはwchar_tとwstringで処理してから
またシェルに出力を返せばすむけど
opendirにwchar_t版がないんで、正規表現以外の処理して、
シェルに任してた部分をC++で全部書こうとすると、
>>993のいうようにmbstowcsとwcstombsで処理を挟んでやらんとどーしよーもないと思う
1037:デフォルトの名無しさん
18/12/28 05:55:59.60 ufThBpcD.net
c++builder10.3 community
IID_PPV_ARGSを使わない場合どうしたら良いか教えてください
何を入れたら良いのかわからないです
#include <windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <shellapi.h>
#include <commoncontrols.h>
void __fastcall TForm1::Button1Click(TObject *Sender) {
IImageList *piml;
SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&piml);// pimlがNULLになる
SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml));// 成功
}
1038:デフォルトの名無しさん
18/12/28 06:05:18.93 ufThBpcD.net
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
スレリンク(tech板)
1039:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 180日 2時間 20分 26秒
1040:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています