検索結果 153 件

by tk-xleader
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: templateの明示的特殊化・intXXX_t型 について
返信数: 8
閲覧数: 496

Re: templateの明示的特殊化・intXXX_t型 について

メンバー演算子関数テンプレートの明示的特殊化の書き方はこうです。 そんなこと言われても、そのプログラムは、質問者がちゃんと情報を 提供している次のコンパイラで、エラーになります。 error: (https://wandbox.org/ C++ gcc HEAD 9.0.0 20181227 (experimental)) コンパイル結果 Start prog.cc:9:18: error: explicit specialization in non-namespace scope 'struct my::X' 9 | template<> void operator>> <int>(in...
by tk-xleader
6ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: templateの明示的特殊化・intXXX_t型 について
返信数: 8
閲覧数: 496

Re: templateの明示的特殊化・intXXX_t型 について

①explicit specializationとは? メンバー演算子関数テンプレートの明示的特殊化の書き方はこうです。 #include <iostream> namespace my{ struct X{ template<typename T> void operator>>(T)const{ std::cout<<"primary template."<<std::endl; } template<> void operator>> <int>(int t)const{ std::cout<<"specialized for int:" << t <<std::endl; } }; ...
by tk-xleader
7ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: c++のメンバ変数の数を取得する方法について
返信数: 1
閲覧数: 2358

Re: c++のメンバ変数の数を取得する方法について

C++にはリフレクションがありませんから、一般的にはクラスのメンバ変数の数を取得する方法はありません。

クラスのメンバ変数の数を取得出来るようにするには、メンバをstd::tuple型にするとか、std::arrayにするとかといった方法はあります。あるいは、外部ライブラリに頼ってもいいのであれば、boost.fusionやboost.hanaを使うとかいう方法もあります。
by tk-xleader
10ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ラムダ式はいらない子?
返信数: 11
閲覧数: 1094

Re: ラムダ式はいらない子?

C++のラムダ式の話であることを前提に回答しますが、C++のラムダ式は関数オブジェクトの糖衣構文なので、ラムダ式がなくても同等のコードを記述することができます。 ただ、1回しか書かないような述語関数のために一々関数オブジェクトを書くのは面倒ですし、ラムダ式のうち、変数キャプチャを使うような類のものを関数オブジェクトとして記述するというのは分かりづらいコードになりますし面倒ですね。 ラムダ式の方が便利な例をということであれば、最初に挙げられた例のfor_eachの出力先をstd::coutではなく、std::ofstreamで開いたoutput.txtとするようなコードをラムダ式ありと無しで書い...
by tk-xleader
10ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 「std::placeholders」の存在意義?
返信数: 8
閲覧数: 874

Re: 「std::placeholders」の存在意義?

ご回答有難うございます tk-xleader さまが書かれました↓ C++14なら、※行をラムダ式を使って std::for_each(arr.begin(), arr.end(), [v = x, &r = x](int _1){r += _1 + v;}); と置き換えることができて、std::bindを用いなくても記述することができます。 これで、C++14において、std::bindの存在がまったく意味がなくなるというでしょうか。どうか。 また宜しくお願いします。 英語ですが、同じ質問をしている人がいます。 https://stackoverflow.com/questions/17...
by tk-xleader
11ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 「std::placeholders」の存在意義?
返信数: 8
閲覧数: 874

Re: 「std::placeholders」の存在意義?

std::placeholders がないと困る、 std::placeholders にしかできない、 という例 C++14以降、std::bindを使わなければならないという場面はないですね。ラムダ式のキャプチャに初期化式をつけることができるようになったのがその理由です。 C++11であれば、ラムダ式で対応できないstd::bindの使い方に、以下のようなものがあります。 #include<iostream> #include<algorithm> #include<functional> void add(int a, int b, int& c){ c += a + b; } int...
by tk-xleader
11ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ゲーム配布時、CSVが詰まったフォルダをなんとかしたい
返信数: 7
閲覧数: 701

Re: ゲーム配布時、CSVが詰まったフォルダをなんとかしたい

powershell(コマンドプロンプトでもいいですが)で、

コード:

(DXライブラリがインストールされているパス)\Tool\DxArchive\DxaEncode -K:(パスワード) (CSVファイルを集めたフォルダパス) (出力ファイル名)

例: D:\DxLib\Tool\DxArchive\DxaEncode -K:PassWord1234 D:\Projects\HogeHogeGame\MapData mapdata.dxa
を実行すれば、暗号化されたDXアーカイブファイルが作成されます。暗号化の強度については何とも言えませんが。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: [c++]自分自身のインスタンスを定数で持つ
返信数: 3
閲覧数: 2342

Re: [c++]自分自身のインスタンスを定数で持つ

かずまさんの回答に少々の補足をします。constexpr修飾されたstaticメンバ変数はliteral typeでないといけませんが、lireral typeになれるのは完全型に限られます。
クラス型はその定義が終了するまではクラス内では不完全型になってしまうので、クラス自身のインスタンスをstatic constexprにすることはできません。

単なるconstの場合は完全型に限られないため、クラス内に宣言だけ書いておいて、クラス定義の外で定義をする(要するにかずまさんが提示された方法)ことができます。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
返信数: 16
閲覧数: 4477

Re: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません

かずま さんが書きました:本当にうまく行きましたか?
strcpy_s は引数が 3個必要です。
https://msdn.microsoft.com/ja-jp/library/td1esda9.aspx
VisualC++ では、C++向けに

コード:

template<std::size_t N>errno_t strcpy_s(char(&)[N],const char*);
というシグネチャのstrcpy_sがオーバーロードされるのでcharの固定長配列であれば引数2個で大丈夫です。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: クラスのコピー禁止について
返信数: 2
閲覧数: 442

Re: クラスのコピー禁止について

コピー禁止のためコピーコンストラクタとコピー代入演算子をprivateに置く分には、引数にconstをつけるかどうかはどうでもいいです。コンストラクタと代入演算子がそれぞれコピーコンストラクタとコピー代入演算子となるには、const(volatileもですが)の有無は問われないです。明示的にオーバーロードしない限り、constの有無でコピーコンストラクタとコピー代入演算子がオーバーロードされるわけではないです。

以上のことはコピーコンストラクタとコピー代入演算子をdelete定義する場合も変わりません。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
返信数: 16
閲覧数: 4477

Re: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません

Bull さんが書きました: ただ、これは歴史的経緯で許容されているはずです。
C++11以降は、文字列リテラルをchar*に暗黙変換できるという仕様は削除されました。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: C++のbeginについて
返信数: 5
閲覧数: 555

Re: C++のbeginについて

std::begin関数が返してくるのはstd::string::iteratorですので、デリファレンスしてから文字定数と比較します。
ですから、

コード:

auto iter = begin(A);
if(*iter == 'a' /*<- ここでデリファレンスして、"文字"定数と比較する。*/) cout<< ...(以下省略)
と書くことになります。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: c++ win32コンソールアプリケーションで作ったプログラムのGUIを作ろうと思っています。
返信数: 2
閲覧数: 492

Re: c++ win32コンソールアプリケーションで作ったプログラムのGUIを作ろうと思っています。

GUI部分だけC#で書いて、ロジック部分はC++のコードを呼び出すのであれば、DLL化してP/Imvokeするか、C++部分をCOMに押し込めてしまうとか、C++/CLIでブリッジするとかという手はあります。

あるいは、C++で作成したコンソールアプリをSystem.Diagnostics.Process.Startメソッドで呼び出す方法もありますね。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: CreateFont関数で取得したフォントが反映されない
返信数: 3
閲覧数: 765

Re: CreateFont関数で取得したフォントが反映されない

SelectObject関数にg_fontの値ではなくアドレスを渡しているのが原因だと思います。19行目の&を外してみるといかがでしょうか。
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: ビットの連結
返信数: 2
閲覧数: 636

Re: ビットの連結

C言語であれば、次のようにすればできます。

コード:

unsigned char a = 0xE, b = 0x89; // 0xE=0000 1110, 0x890=1000 1001
unsigned int x = a << 8u | b; // x == 0000 1110 1000 1001
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: c++11 const参照の受け方について
返信数: 4
閲覧数: 1082

Re: c++11 const参照の受け方について

単にautoで変数を宣言すると、テンプレート関数の引数型と同じ規則によって変数型が決まります。例えば、 template<typename T>void f(T arg){} にint const&な値を渡した場合、argの型はconstも参照も外れた単なるint型になります。それと同じで、 auto val = f();//const hoge& f(); とすると、変数valの型は単なるhogeになります。 関数の戻り値をconst&にするかどうかはケースバイケースなのですが、const&を返す場合は、関数内で寿命が尽きるオブジェクトを戻り値にしないように注意しなければいけないので、戻り値...
by tk-xleader
1年前
フォーラム: C言語何でも質問掲示板
トピック: c++11 const参照の受け方について
返信数: 4
閲覧数: 1082

Re: c++11 const参照の受け方について

(1) 戻り値の受け取り方はケースバイケースで異なります。受け取った後でその変数を変更するつもりなら単にautoで受け取ることになります。戻り値を読み取りに使うだけなら余分な初期化が生じないconst&で受け取る方がいいでしょう。 (2) 単にautoと記述した場合には、テンプレート関数の引数推論と同じ規則で型が決定されるので、初期化値の型がconst&であっても変数がconst&修飾されることはないです。 (3) 戻り値が参照ではないのであれば、最適化を無視すれば戻り値のために一時オブジェクトが生成されます。したがってbar.fuga()は一時オブジェクトを生成してそれを返し、戻り値の一時オ...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: c言語の"汎用"という意味について
返信数: 2
閲覧数: 600

Re: c言語の"汎用"という意味について

ここでの「汎用」の意味は、おそらくソケットのプロトコルレベルでの汎用性のことではないでしょうか。例えばですが、 TCPとUDPとではsockaddrの意味が異なる はずですが、いずれもsockaddrで表せるデータ構造になっている、ということだと思います。つまり、プロトコル間に共通のデータ構造という意味です。 [訂正] TCP/IPとUDP/IPではいずれもsockaddr_inを使うので同じのようです。sockaddrの派生形としては次のようなものがあるみたいです。 sockaddr_in IPv4通信用。 sockaddr_in6 IPv6通信用。 sockaddr_un Unixドメイン...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
返信数: 14
閲覧数: 2082

Re: [c++] テンプレートクラスに対するstd::hashの特殊化

typenameをつければよかったんですね。早速実装してみます! と思いきや、、、sleepさんはtypenameつけてもerrorが出るとおっしゃっていますね^^; よくよく考えればtemplate引数をテンプレートクラスの内部型で推論させることは不可能でした。ごめんなさい。 ところでofftopicでの内容なんですが、 コンパイルでは怒られないけど、実行するとエラーが出るということでしょうか? エラーが出るかどうかすらわかりませんが、少なくともC++の規格上何らの保証もない(何が起こっても文句が言えない)ということです。限られた環境でのみコンパイルと実行ができればよいということであれば問...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
返信数: 14
閲覧数: 2082

Re: [c++] テンプレートクラスに対するstd::hashの特殊化

template<typename S,typename A> struct std::hash<typename QLClass<S,A>::SA> { size_t operator()(const typename QLClass<S,A>::SA &sa){return 0;} }; SAはテンプレート引数に依存する型なので、型名であることを明示するためにtypenameを付ける必要があります。 std::hashに対してstd::pair<T,U>についての特殊化を用意するのは、規格上未定義な動作をするコードとなります。それはQLClass内でusingで別名を定義して、その別名か...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
返信数: 14
閲覧数: 2082

Re: [c++] テンプレートクラスに対するstd::hashの特殊化

もしかしてpairはstd::pairでしょうか? 仮にstd::pairだとすると、std名前空間で特殊化できるのはユーザー定義型依存型に限定されるので、それは未定義の動作を引き起こします(少なくとも、C++14の時点で、ユーザー定義型に依存さえしていれば、部分特殊化は許されるようになってはいますが)。 その上で、std::hashに対する部分特殊化の方法ですが、普通にstd名前空間内で部分特殊化をすれば大丈夫です。 template<typename T,typename U> class MyClass{ }; namespace std{ template<typename T,typ...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: ツールバーの背景をVistaや7のExplorerみたいにしたい
返信数: 4
閲覧数: 831

Re: ツールバーの背景をVistaや7のExplorerみたいにしたい

回答ありがとうございます。やはりAPI直叩きで実現しようと思ったら背景を自力で描画する他ないですか…

ただ、グラデーションとアルファブレンドについては、それぞれGradiantFill、AlphaBlend関数があることが分かったので、これを使って自力で描画するという方針で押し切ろうと思います。
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: ツールバーの背景をVistaや7のExplorerみたいにしたい
返信数: 4
閲覧数: 831

ツールバーの背景をVistaや7のExplorerみたいにしたい

C++でWindows APIを直接叩いてます。実行環境はWindows10 64bitです。 Windows APIで作成したツールバーの背景をVistaや7のExplorerのツールバー(画像参照)みたいにしたいのですが、現在はとりあえず以下のような、ツールバーのプロシージャを乗っ取ってWM_ERASEBKGNDを捕まえてそこで自力で背景を作成するという、工夫もへったくれもない書き方をしています。 #include<Windows.h> #include<tchar.h> #include<CommCtrl.h> WNDPROC lpfnDefToolbarProc; LRESULT CA...
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: すっきりわかるjava入門でc言語入門
返信数: 13
閲覧数: 1498

Re: すっきりわかるjava入門でc言語入門

jar形式のファイルが気に入らないということですが、exewrapという、jar形式→exe形式の変換を行うツールを使えば、exe形式のJava製アプリを作成することができます。
C#を改めて勉強するということであれば関係のない話ではありますが…
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: C++ の初期化について教えて下さい
返信数: 7
閲覧数: 1428

Re: C++ の初期化について教えて下さい

コンストラクタ初期化子と宣言に続く初期化子を比較すると、

コンストラクタ初期化子
利点:コンストラクタの引数を使ってデータメンバを初期化することができます。
欠点:データメンバを初期化することを忘れる可能性があります。

宣言に続く初期化子
利点:直感的で、複数のコンストラクタで初期化を共通できます。
欠点:当然ながら、コンストラクタの引数は使えません。ただし、宣言に続く初期化子があるデータメンバについてもコンストラクタ初期化が使えるため、大した欠点ではありません。
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: ContentpaneなどのコントロールとActionListner
返信数: 3
閲覧数: 744

Re: ContentpaneなどのコントロールとActionListner

 調べてみる限り、そのままの状態ではSystem.outにActionListenerのオブジェクトを結びつけることはまずできない(そのためのメソッドがない)でしょう。ただ、System.outはSystem.setOutメソッドを使えば標準出力のオブジェクトを置き換えることができるので、PrintStreamを継承して出力があったらActionListenerに通知するようなクラスを自作してそれで置き換えるという手はどうでしょうか。
by tk-xleader
2年前
フォーラム: C言語何でも質問掲示板
トピック: ■ 2017年明けましておめでとうございます 新年挨拶トピック ■ [雑談]
返信数: 7
閲覧数: 1392

Re: ■ 2017年明けましておめでとうございます 新年挨拶トピック ■ [雑談]

あけましておめでとうございます。今年もよろしくお願いします。

本年の目標ですが、プログラミングに関することなら、powershellを一通り書けるようになることですかね。余力があればスクリプト系の言語にも手を出してみたいと思います。
by tk-xleader
3年前
フォーラム: C言語何でも質問掲示板
トピック: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)
返信数: 3
閲覧数: 802

Re: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)

Boost.Timerはビルド済みのバイナリが必要なのですが、ビルド済みのバイナリは用意しましたでしょうか?

もししていない場合、Boostライブラリのビルド方法にしたがって自分でバイナリを作成するか、もしくはhttps://sourceforge.net/projects/boost/ ... -binaries/からバイナリをダウンロードするかして用意することになります。

既にバイナリは用意しているということであれば、リンカへの設定でライブラリパスを指定することでリンクできるようになると思います。
by tk-xleader
3年前
フォーラム: C言語何でも質問掲示板
トピック: tuple操作について
返信数: 14
閲覧数: 1650

Re: tuple操作について

 GCCおよびClangでは普通に通りますから、コードそのものに問題があるわけではないはずなのですが、Visual C++は標準準拠度が他に比べると低いといわざるを得ないので、おそらくVisual C++側の問題ではないかと思います。
 ただ、こちらでもコンパイルをして、エラーメッセージを確認したところ、どうもdo_tuple_exec::implの実体化の段階で、特殊化されているはずのクラステンプレートが実体化されず、特殊化されていないバージョンが実体化されているようです。おそらくエラーの原因はこれだと思います。
by tk-xleader
3年前
フォーラム: C言語何でも質問掲示板
トピック: tuple操作について
返信数: 14
閲覧数: 1650

Re: tuple操作について

上のコードの簡単な説明です。  テンプレートでループを実現しようという場合、テンプレートを再帰的に特殊化するというテクニックが一般的に利用されます。そこでテンプレート引数に整数を取るようにして、愚直に可変長テンプレートの数まで再帰し続けるように実装したのが上のコードです。  下のようなコードと同じような発想に基づいています。 void do_func(int* array,int array_size,int now){ if(now == array_size) return ; printf("%d",array[now]); do_func(array,array_size,now+1)...

詳細検索ページへ移動する