Windows環境ではあると思いますが、コンパイラは何を使ってますか?
ソースコードの文字エンコーディングと実行ファイルの文字エンコーディングをオプションで指定することで解決する可能性がありますので、aggron_jpさんが使われているコンパイラを開示していただくとよいかと思います。
検索結果 158 件
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 静的ライブラリをReleaseビルドとDebugビルドで共用したい。
- 返信数: 6
- 閲覧数: 4703
Re: 静的ライブラリをReleaseビルドとDebugビルドで共用したい。
解決していたら申し訳ないんですが… msvcのlibcはちょっとややこしいので、基本的なことから説明します。以下はmsvcを念頭に置いています。 1 そもそも.libファイルには何が記録されているか。 libファイルには大別すると、静的ライブラリとインポートライブラリの2つの種類があります。 それで、静的ライブラリは、ソースファイルをコンパイルすると、ソースファイルごとに、コンパイル後のバイナリとして.objファイルが出力されますが、この.objファイルを一つのファイルにアーカイブしたものです。要するに、リンク前のコンパイル済みバイナリの集積体です。 そのため、静的ライブラリの内容は、主にコン...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 多倍長数を使って円周率を求める
- 返信数: 1
- 閲覧数: 2995
Re: 多倍長数を使って円周率を求める
既に解決していたら申し訳ないんですが… 配布されたコードは、set関数が、n桁の自然数から、10進法における各位の桁の数を1の位をa[n-1]、10の位をa[n-2]、100の位をa[n-3]...という風に配列に格納する関数で、残りの関数が、その配列同士を筆算の要領で四則演算しているコードになりますね(ここまでは大丈夫でしょうか?)。 それで、これを小数に対応させる方法としては、単純に、四則演算の関数に、配列中の1の位を表している要素の添え字を取る整数型の引数を増やして、後は小数点を含む筆算の要領で四則演算の関数を書き直すことになるかと思います。 (なお、全ての配列の1の位の位置が同じという...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 2つのexeで動かしたいのですが…
- 返信数: 2
- 閲覧数: 2768
Re: 2つのexeで動かしたいのですが…
Visual Studioで言語がC++ということなので、Windows APIを直叩きしているという前提で回答するならば、WM_MOUSEMOVE などの入力デバイス系のメッセージは、Foreground状態のWindowに送信されるはずなので、背面のWindowのプロシージャでは受け取れないはずです。 それならどうすれば良いのかといえば、usao さんがおっしゃるように、GetAsyncKeyState やGetCursorPos といったwinapi関数を 定期的に呼び出して キーボード・マウスボタンの押下状態やカーソル位置を取得すればよいということになります。 その上でもう少し補足する...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ヘッダファイルDxLib.hについて
- 返信数: 1
- 閲覧数: 2845
Re: C++ヘッダファイルDxLib.hについて
おそらくですが、設定がコンソールアプリケーションのままになっているのだと思います。
とりあえず、プロジェクトのプロパティ->構成プロパティ->リンカー->システムから「サブシステム」の項目を「Windows」に変更してみてください。
とりあえず、プロジェクトのプロパティ->構成プロパティ->リンカー->システムから「サブシステム」の項目を「Windows」に変更してみてください。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: templateの明示的特殊化・intXXX_t型 について
- 返信数: 8
- 閲覧数: 4587
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...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: templateの明示的特殊化・intXXX_t型 について
- 返信数: 8
- 閲覧数: 4587
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; } }; ...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: c++のメンバ変数の数を取得する方法について
- 返信数: 1
- 閲覧数: 4160
Re: c++のメンバ変数の数を取得する方法について
C++にはリフレクションがありませんから、一般的にはクラスのメンバ変数の数を取得する方法はありません。
クラスのメンバ変数の数を取得出来るようにするには、メンバをstd::tuple型にするとか、std::arrayにするとかといった方法はあります。あるいは、外部ライブラリに頼ってもいいのであれば、boost.fusionやboost.hanaを使うとかいう方法もあります。
クラスのメンバ変数の数を取得出来るようにするには、メンバをstd::tuple型にするとか、std::arrayにするとかといった方法はあります。あるいは、外部ライブラリに頼ってもいいのであれば、boost.fusionやboost.hanaを使うとかいう方法もあります。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: ラムダ式はいらない子?
- 返信数: 11
- 閲覧数: 7399
Re: ラムダ式はいらない子?
C++のラムダ式の話であることを前提に回答しますが、C++のラムダ式は関数オブジェクトの糖衣構文なので、ラムダ式がなくても同等のコードを記述することができます。 ただ、1回しか書かないような述語関数のために一々関数オブジェクトを書くのは面倒ですし、ラムダ式のうち、変数キャプチャを使うような類のものを関数オブジェクトとして記述するというのは分かりづらいコードになりますし面倒ですね。 ラムダ式の方が便利な例をということであれば、最初に挙げられた例のfor_eachの出力先をstd::coutではなく、std::ofstreamで開いたoutput.txtとするようなコードをラムダ式ありと無しで書い...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: 「std::placeholders」の存在意義?
- 返信数: 8
- 閲覧数: 5780
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...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: 「std::placeholders」の存在意義?
- 返信数: 8
- 閲覧数: 5780
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...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲーム配布時、CSVが詰まったフォルダをなんとかしたい
- 返信数: 7
- 閲覧数: 4766
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++]自分自身のインスタンスを定数で持つ
- 返信数: 3
- 閲覧数: 13390
Re: [c++]自分自身のインスタンスを定数で持つ
かずまさんの回答に少々の補足をします。constexpr修飾されたstaticメンバ変数はliteral typeでないといけませんが、lireral typeになれるのは完全型に限られます。
クラス型はその定義が終了するまではクラス内では不完全型になってしまうので、クラス自身のインスタンスをstatic constexprにすることはできません。
単なるconstの場合は完全型に限られないため、クラス内に宣言だけ書いておいて、クラス定義の外で定義をする(要するにかずまさんが提示された方法)ことができます。
クラス型はその定義が終了するまではクラス内では不完全型になってしまうので、クラス自身のインスタンスをstatic constexprにすることはできません。
単なるconstの場合は完全型に限られないため、クラス内に宣言だけ書いておいて、クラス定義の外で定義をする(要するにかずまさんが提示された方法)ことができます。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
- 返信数: 16
- 閲覧数: 24559
Re: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
VisualC++ では、C++向けに というシグネチャのstrcpy_sがオーバーロードされるのでcharの固定長配列であれば引数2個で大丈夫です。かずま さんが書きました:本当にうまく行きましたか?
strcpy_s は引数が 3個必要です。
https://msdn.microsoft.com/ja-jp/library/td1esda9.aspx
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: クラスのコピー禁止について
- 返信数: 2
- 閲覧数: 1916
Re: クラスのコピー禁止について
コピー禁止のためコピーコンストラクタとコピー代入演算子をprivateに置く分には、引数にconstをつけるかどうかはどうでもいいです。コンストラクタと代入演算子がそれぞれコピーコンストラクタとコピー代入演算子となるには、const(volatileもですが)の有無は問われないです。明示的にオーバーロードしない限り、constの有無でコピーコンストラクタとコピー代入演算子がオーバーロードされるわけではないです。
以上のことはコピーコンストラクタとコピー代入演算子をdelete定義する場合も変わりません。
以上のことはコピーコンストラクタとコピー代入演算子をdelete定義する場合も変わりません。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
- 返信数: 16
- 閲覧数: 24559
Re: E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません
C++11以降は、文字列リテラルをchar*に暗黙変換できるという仕様は削除されました。Bull さんが書きました: ただ、これは歴史的経緯で許容されているはずです。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++のbeginについて
- 返信数: 5
- 閲覧数: 3250
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: c++ win32コンソールアプリケーションで作ったプログラムのGUIを作ろうと思っています。
- 返信数: 2
- 閲覧数: 2007
Re: c++ win32コンソールアプリケーションで作ったプログラムのGUIを作ろうと思っています。
GUI部分だけC#で書いて、ロジック部分はC++のコードを呼び出すのであれば、DLL化してP/Imvokeするか、C++部分をCOMに押し込めてしまうとか、C++/CLIでブリッジするとかという手はあります。
あるいは、C++で作成したコンソールアプリをSystem.Diagnostics.Process.Startメソッドで呼び出す方法もありますね。
あるいは、C++で作成したコンソールアプリをSystem.Diagnostics.Process.Startメソッドで呼び出す方法もありますね。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: CreateFont関数で取得したフォントが反映されない
- 返信数: 3
- 閲覧数: 2817
Re: CreateFont関数で取得したフォントが反映されない
SelectObject関数にg_fontの値ではなくアドレスを渡しているのが原因だと思います。19行目の&を外してみるといかがでしょうか。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: ビットの連結
- 返信数: 2
- 閲覧数: 1992
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: c++11 const参照の受け方について
- 返信数: 4
- 閲覧数: 4327
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&を返す場合は、関数内で寿命が尽きるオブジェクトを戻り値にしないように注意しなければいけないので、戻り値...
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: c++11 const参照の受け方について
- 返信数: 4
- 閲覧数: 4327
Re: c++11 const参照の受け方について
(1) 戻り値の受け取り方はケースバイケースで異なります。受け取った後でその変数を変更するつもりなら単にautoで受け取ることになります。戻り値を読み取りに使うだけなら余分な初期化が生じないconst&で受け取る方がいいでしょう。 (2) 単にautoと記述した場合には、テンプレート関数の引数推論と同じ規則で型が決定されるので、初期化値の型がconst&であっても変数がconst&修飾されることはないです。 (3) 戻り値が参照ではないのであれば、最適化を無視すれば戻り値のために一時オブジェクトが生成されます。したがってbar.fuga()は一時オブジェクトを生成してそれを返し、戻り値の一時オ...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: c言語の"汎用"という意味について
- 返信数: 2
- 閲覧数: 1973
Re: c言語の"汎用"という意味について
ここでの「汎用」の意味は、おそらくソケットのプロトコルレベルでの汎用性のことではないでしょうか。例えばですが、 TCPとUDPとではsockaddrの意味が異なる はずですが、いずれもsockaddrで表せるデータ構造になっている、ということだと思います。つまり、プロトコル間に共通のデータ構造という意味です。 [訂正] TCP/IPとUDP/IPではいずれもsockaddr_inを使うので同じのようです。sockaddrの派生形としては次のようなものがあるみたいです。 sockaddr_in IPv4通信用。 sockaddr_in6 IPv6通信用。 sockaddr_un Unixドメイン...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
- 返信数: 14
- 閲覧数: 7185
Re: [c++] テンプレートクラスに対するstd::hashの特殊化
typenameをつければよかったんですね。早速実装してみます! と思いきや、、、sleepさんはtypenameつけてもerrorが出るとおっしゃっていますね^^; よくよく考えればtemplate引数をテンプレートクラスの内部型で推論させることは不可能でした。ごめんなさい。 ところでofftopicでの内容なんですが、 コンパイルでは怒られないけど、実行するとエラーが出るということでしょうか? エラーが出るかどうかすらわかりませんが、少なくともC++の規格上何らの保証もない(何が起こっても文句が言えない)ということです。限られた環境でのみコンパイルと実行ができればよいということであれば問...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
- 返信数: 14
- 閲覧数: 7185
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で別名を定義して、その別名か...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++] テンプレートクラスに対するstd::hashの特殊化
- 返信数: 14
- 閲覧数: 7185
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...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: ツールバーの背景をVistaや7のExplorerみたいにしたい
- 返信数: 4
- 閲覧数: 2548
Re: ツールバーの背景をVistaや7のExplorerみたいにしたい
回答ありがとうございます。やはりAPI直叩きで実現しようと思ったら背景を自力で描画する他ないですか…
ただ、グラデーションとアルファブレンドについては、それぞれGradiantFill、AlphaBlend関数があることが分かったので、これを使って自力で描画するという方針で押し切ろうと思います。
ただ、グラデーションとアルファブレンドについては、それぞれGradiantFill、AlphaBlend関数があることが分かったので、これを使って自力で描画するという方針で押し切ろうと思います。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: ツールバーの背景をVistaや7のExplorerみたいにしたい
- 返信数: 4
- 閲覧数: 2548
ツールバーの背景を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...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: すっきりわかるjava入門でc言語入門
- 返信数: 13
- 閲覧数: 5737
Re: すっきりわかるjava入門でc言語入門
jar形式のファイルが気に入らないということですが、exewrapという、jar形式→exe形式の変換を行うツールを使えば、exe形式のJava製アプリを作成することができます。
C#を改めて勉強するということであれば関係のない話ではありますが…
C#を改めて勉強するということであれば関係のない話ではありますが…
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ の初期化について教えて下さい
- 返信数: 7
- 閲覧数: 3504
Re: C++ の初期化について教えて下さい
コンストラクタ初期化子と宣言に続く初期化子を比較すると、
コンストラクタ初期化子
利点:コンストラクタの引数を使ってデータメンバを初期化することができます。
欠点:データメンバを初期化することを忘れる可能性があります。
宣言に続く初期化子
利点:直感的で、複数のコンストラクタで初期化を共通できます。
欠点:当然ながら、コンストラクタの引数は使えません。ただし、宣言に続く初期化子があるデータメンバについてもコンストラクタ初期化が使えるため、大した欠点ではありません。
コンストラクタ初期化子
利点:コンストラクタの引数を使ってデータメンバを初期化することができます。
欠点:データメンバを初期化することを忘れる可能性があります。
宣言に続く初期化子
利点:直感的で、複数のコンストラクタで初期化を共通できます。
欠点:当然ながら、コンストラクタの引数は使えません。ただし、宣言に続く初期化子があるデータメンバについてもコンストラクタ初期化が使えるため、大した欠点ではありません。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: ContentpaneなどのコントロールとActionListner
- 返信数: 3
- 閲覧数: 2099
Re: ContentpaneなどのコントロールとActionListner
調べてみる限り、そのままの状態ではSystem.outにActionListenerのオブジェクトを結びつけることはまずできない(そのためのメソッドがない)でしょう。ただ、System.outはSystem.setOutメソッドを使えば標準出力のオブジェクトを置き換えることができるので、PrintStreamを継承して出力があったらActionListenerに通知するようなクラスを自作してそれで置き換えるという手はどうでしょうか。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: ■ 2017年明けましておめでとうございます 新年挨拶トピック ■ [雑談]
- 返信数: 7
- 閲覧数: 4789
Re: ■ 2017年明けましておめでとうございます 新年挨拶トピック ■ [雑談]
あけましておめでとうございます。今年もよろしくお願いします。
本年の目標ですが、プログラミングに関することなら、powershellを一通り書けるようになることですかね。余力があればスクリプト系の言語にも手を出してみたいと思います。
本年の目標ですが、プログラミングに関することなら、powershellを一通り書けるようになることですかね。余力があればスクリプト系の言語にも手を出してみたいと思います。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)
- 返信数: 3
- 閲覧数: 2944
Re: 一部の拡張ライブラリを使うとビルドに失敗する(リンカツールエラ―LNK1104)
Boost.Timerはビルド済みのバイナリが必要なのですが、ビルド済みのバイナリは用意しましたでしょうか?
もししていない場合、Boostライブラリのビルド方法にしたがって自分でバイナリを作成するか、もしくはhttps://sourceforge.net/projects/boost/ ... -binaries/からバイナリをダウンロードするかして用意することになります。
既にバイナリは用意しているということであれば、リンカへの設定でライブラリパスを指定することでリンクできるようになると思います。
もししていない場合、Boostライブラリのビルド方法にしたがって自分でバイナリを作成するか、もしくはhttps://sourceforge.net/projects/boost/ ... -binaries/からバイナリをダウンロードするかして用意することになります。
既にバイナリは用意しているということであれば、リンカへの設定でライブラリパスを指定することでリンクできるようになると思います。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: tuple操作について
- 返信数: 14
- 閲覧数: 6386
Re: tuple操作について
GCCおよびClangでは普通に通りますから、コードそのものに問題があるわけではないはずなのですが、Visual C++は標準準拠度が他に比べると低いといわざるを得ないので、おそらくVisual C++側の問題ではないかと思います。
ただ、こちらでもコンパイルをして、エラーメッセージを確認したところ、どうもdo_tuple_exec::implの実体化の段階で、特殊化されているはずのクラステンプレートが実体化されず、特殊化されていないバージョンが実体化されているようです。おそらくエラーの原因はこれだと思います。
ただ、こちらでもコンパイルをして、エラーメッセージを確認したところ、どうもdo_tuple_exec::implの実体化の段階で、特殊化されているはずのクラステンプレートが実体化されず、特殊化されていないバージョンが実体化されているようです。おそらくエラーの原因はこれだと思います。
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: tuple操作について
- 返信数: 14
- 閲覧数: 6386
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)...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: tuple操作について
- 返信数: 14
- 閲覧数: 6386
Re: tuple操作について
boostなしでというのであればこんな感じでしょうかね。 #include <iostream> #include <tuple> using namespace std; template<std::size_t I> class do_tuple_exec{ template<typename T,std::size_t J> struct impl{ template<typename Func,typename... Types> static void exec(std::tuple<Types...>& t, Func f){ f(std::get<J>(t)); impl<T,J...
- 7年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++11,14のラムダ関数について
- 返信数: 7
- 閲覧数: 4012
Re: C++11,14のラムダ関数について
ラムダ式の存在意義ですか…
これはSTLをよく使う人じゃないと分かりづらいと思いますし、C++の場合ラムダ式を使わずとも不利益はありません(ゼロ・オーバーヘッドの原則)から、存在意義が分かるまで別に使用しなくてもいいのではないかと思います。
STLで自作ファンクタをよく使う人ならラムダ式がかなり便利であることが実感できると思いますが…
これはSTLをよく使う人じゃないと分かりづらいと思いますし、C++の場合ラムダ式を使わずとも不利益はありません(ゼロ・オーバーヘッドの原則)から、存在意義が分かるまで別に使用しなくてもいいのではないかと思います。
STLで自作ファンクタをよく使う人ならラムダ式がかなり便利であることが実感できると思いますが…
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]暗黙の型変換
- 返信数: 7
- 閲覧数: 4615
Re: [C++]暗黙の型変換
なるほどこれね。 C++11/14/17 の機能のサポート 上記の、「明示的な変換演算子」かな? 「明示的な変換演算子」は、explicitコンストラクタに対応する変換演算子(explicit operator T())なので、ここで問題になっているものとはちょっと違います。explicitが付与された変換演算子は、明示的な型変換でのみ呼び出すことができます。ただし、bool型への変換については、特定の文脈では暗黙に呼び出されることになっています( bool型へのexplicitユーザ定義変換 - yohhoyの日記 )。 他方で、質問者様のコードはC++03でも通ります。それは、exp...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]暗黙の型変換
- 返信数: 7
- 閲覧数: 4615
Re: [C++]暗黙の型変換
型変換(Conversions) - C++11の文法と機能(C++11: Syntax and Feature)
これによりますと、いずれもユーザー定義の型変換なので、同じ規則に従うということになります。つまり、いずれもユーザー定義の型変換が暗黙に呼び出されることを許容している場合のみ動作します。
これによりますと、いずれもユーザー定義の型変換なので、同じ規則に従うということになります。つまり、いずれもユーザー定義の型変換が暗黙に呼び出されることを許容している場合のみ動作します。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++を覚えるためにC言語は必要ないんですか?
- 返信数: 4
- 閲覧数: 4591
Re: C++を覚えるためにC言語は必要ないんですか?
確かにC++は"概ね"C言語のスーパーセットになっています。そして多くの人がC言語を学習してからC++を学んだということから、C言語を学んでからC++を学ぶというのが一種のセオリーみたいになっているところがあります。ただし、C言語の学習を一旦経た方がいいかどうかは、時と場合によります。 C言語では常識的なコードがC++では忌避すべきコードと考えられているようなことも多々あるのです。「C言語を学ぶと変な癖がつく」というのは、C言語では普通だけどC++では避けるべきコードを書いてしまいがちになるということから来てるんだろうと思います。ただし、C++はC言語に毛が生えた程度のスタイルでも使えるよ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: ビルドのようすが
- 返信数: 6
- 閲覧数: 3194
Re: ビルドのようすが
プリコンパイルヘッダー(PCH)を利用してみるとかいう手はあると思います。
特にWindows SDK関係のヘッダファイルは大きいですが書き換えることはまずないのでわりと有効かと思います。
特にWindows SDK関係のヘッダファイルは大きいですが書き換えることはまずないのでわりと有効かと思います。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: Node.jsをローカルで使いたい
- 返信数: 1
- 閲覧数: 1530
Re: Node.jsをローカルで使いたい
自己解決いたしました。
HTTPサーバーを公開にするためには、
(1) HTTPサーバーが使用するポートが開放されており、
(2) 自機でサーバーソフトが起動している。
という2つの条件を満たしていなければならないということが分かりました。そこで、ポート80を遮断して運用することによって、自機でサンプル的なサーバーアプリを起動した場合でも公開サーバー状態にならないと思われるので、これで解決としたいと思います。
HTTPサーバーを公開にするためには、
(1) HTTPサーバーが使用するポートが開放されており、
(2) 自機でサーバーソフトが起動している。
という2つの条件を満たしていなければならないということが分かりました。そこで、ポート80を遮断して運用することによって、自機でサンプル的なサーバーアプリを起動した場合でも公開サーバー状態にならないと思われるので、これで解決としたいと思います。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: マルチプラットフォーム開発について知りたいです
- 返信数: 4
- 閲覧数: 4321
Re: マルチプラットフォーム開発について知りたいです
・計算1つをとってみてもOS毎に過程に差がある (そういった部分はAPIとして書いてあってOSから提供される?) ・したがって生成されるコードは環境毎に異なるが、 同じ(見た目の)コードを様々な環境向けにそれぞれコンパイルすることはできる という感じでしょうか。 算術演算や、分岐/繰り返しなどの制御などはCPU命令で処理するのが普通です(当然、CPUの種類ごとに命令コードは異なります)が、コンピューターのリソース(メモリ、ファイルなど)などはOSのシステムコールを通してアクセスします。 ただし、算術演算や制御文などはC/C++の規格によってある程度定められていますから、1+1やwhil...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: Node.jsをローカルで使いたい
- 返信数: 1
- 閲覧数: 1530
Node.jsをローカルで使いたい
http://www.cyokodog.net/blog/first-node-js/ このページを見ながらNode.jsについて調べてみています。Node.jsが主にサーバーサイドで動作するフレームワークであることは何となくつかめてきましたが、ローカルマシンにおける開発にも役立てられるのではないかと思って勉強してます。 ところで、httpモジュールによるHTTPサーバーのサンプルを動かした場合に、私の知らないうちに自分のマシンが公開自宅サーバーと化してしまうような事態にならないかどうかと悩んでいます。サーバー機能自体はいろいろと試してみたいところなのですが、それで自分のPCにセキュリティ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: マルチプラットフォーム開発について知りたいです
- 返信数: 4
- 閲覧数: 4321
Re: マルチプラットフォーム開発について知りたいです
原則として、C++はコンパイル後コードでの移植性は極めて低いと言わざるを得ません。なぜなら、C++の特性上各マシン固有のマシン語にコンパイルされるのが通常であり、かつ同一のCPUであってもOSごとにシステムコールなどのAPIが異なるため、環境ごとに全く異なる実行バイナリが生成されるのが常だからです。 しかも、各環境のネイティブAPIに直接アクセスしているような場合であれば、ソースレベルの移植性もぐっと低くなります。マルチプラットフォームを実現するためには、環境ごとに異なる部分をラッパーを挟んで共通化する必要があります。 つまり、mobaさんが考えているとおり、WindowsではDxライブラ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++でおこったアクセスエラー
- 返信数: 4
- 閲覧数: 4000
Re: C++でおこったアクセスエラー
PlayerShotMgr::Initを呼んでいる側に問題があるのではないでしょうか?
たぶん、未初期化のPlayerShotMgr*型の変数でInitを呼び出している箇所があると思います。そこに適切な初期化を施せば直るでしょう。
たぶん、未初期化のPlayerShotMgr*型の変数でInitを呼び出している箇所があると思います。そこに適切な初期化を施せば直るでしょう。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: std::listでnew・deleteをオーバーロード
- 返信数: 5
- 閲覧数: 4103
Re: std::listでnew・deleteをオーバーロード
operator newは、第一引数にnew演算子の型のバイトサイズが渡されます。そして、少なくとも第一引数のバイト数は書き込み可能なメモリブロックを戻り値とします。他方、operator deleteは、delete演算子のオペランドのメモリブロックがそのまま渡されます。そのメモリブロックは既に解体済み(デストラクタが呼ばれた後)なので、通常はメモリブロックの解放処理を記述します。 原則として、operator new/deleteがやるべきことはメモリブロックの確保/解放(placement newの場合は受け取ったメモリブロックをそのまま返すだけですが)なので、そこでTask型の存在...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: ウィンドウを新たに作りたい
- 返信数: 2
- 閲覧数: 1854
Re: ウィンドウを新たに作りたい
コードを見なければ詳しいことははっきりしませんが、もしかして、ウィンドウプロシージャでWM_DESTROYを拾ってPostQuitMessageを呼び出すことを忘れているとかではないでしょうか?
ただ、やはり現状いかなる状態なのかが明らかではないので、もうすこし詳しく書いていただけると回答者ももっと詳しく回答できると思います。
ただ、やはり現状いかなる状態なのかが明らかではないので、もうすこし詳しく書いていただけると回答者ももっと詳しく回答できると思います。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: MakeGraphで作った画像に透過色を指定したい
- 返信数: 8
- 閲覧数: 5015
Re: MakeGraphで作った画像に透過色を指定したい
DxLib.libをobjdump -t で調べたときのシンボル情報の中には存在するのですが、ビルドするとリンカエラーとかが生じるのでしょうか?namari さんが書きました: 内容的には完璧なんですが、今のDXlibにはないのか識別子が見つかりませんね・・・
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: MakeGraphで作った画像に透過色を指定したい
- 返信数: 8
- 閲覧数: 5015
Re: MakeGraphで作った画像に透過色を指定したい
リファレンスには載っていませんが、DxLib.hで宣言されている次の関数が使えるかもしれないですよ。 extern int DrawRotaFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *Fo...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: LPARAM型のキャスト
- 返信数: 7
- 閲覧数: 4392
Re: LPARAM型のキャスト
gcrootテンプレート(<vcclr.h>)を利用すればマネージハンドルをネイティブ型のように扱えます。gcroot<List<T>^>*とすればポインタとして扱えますから、これでLPARAMにキャストすることが出来ます。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: boostを使った多倍長整数からintへの変換
- 返信数: 6
- 閲覧数: 3693
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: LGPLのリバースエンジニアリングに関して
- 返信数: 2
- 閲覧数: 2940
Re: LGPLのリバースエンジニアリングに関して
LGPLv3の場合、第0節に規定する「"Combined Work"(結合された作品)」にはLGPLの効力が及ぶことになります。そして、"Combined Work"とは、「a work produced by combining or linking an Application with the Library.」と定義されているので、LGPLによって許諾されたライブラリにリンクするプログラムは全てそのライブラリとの関係で"Combined Work"となります。 ここで問題になるのは、ライブラリAの派生物の派生物であるアプリケーションCがここでいう"Combined Work"にあた...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: テンプレート関数・クラスの明示的実体化について
- 返信数: 5
- 閲覧数: 3592
Re: テンプレート関数・クラスの明示的実体化について
全ての翻訳単位で実体化することによって不都合があるのかといえば、ODR原則さえ守っていれば基本的には問題ないのですが、やはり不必要に実体化するのは時間的・空間的に非効率ではあります。
したがって、明示的実体化は必要な範囲にとどめ、それ以外はextern templateで対応するのが一番いいとは思います。hoge<1>::fの定義があるf.cppでも実体化すれば大丈夫だろうと思います。少なくともmain.cppではhoge<1>の実体化が必要ではないはずなので。
したがって、明示的実体化は必要な範囲にとどめ、それ以外はextern templateで対応するのが一番いいとは思います。hoge<1>::fの定義があるf.cppでも実体化すれば大丈夫だろうと思います。少なくともmain.cppではhoge<1>の実体化が必要ではないはずなので。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: テンプレート関数・クラスの明示的実体化について
- 返信数: 5
- 閲覧数: 3592
Re: テンプレート関数・クラスの明示的実体化について
ヘッダに強制実体化のコードを書くと、全てのファイルでテンプレートを実体化するということになりますが、時間的にも空間的にもコンパイル効率が悪くなります。
C++11で、extern templateという文法が導入され、他の翻訳単位にテンプレートの実体が存在することを宣言することができるようになりましたので、
extern template class hoge<1>;
とヘッダに書いた上で、いずれか1つのファイルで実体化するという改善方法が考えられます。
C++11で、extern templateという文法が導入され、他の翻訳単位にテンプレートの実体が存在することを宣言することができるようになりましたので、
extern template class hoge<1>;
とヘッダに書いた上で、いずれか1つのファイルで実体化するという改善方法が考えられます。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: directX9について
- 返信数: 6
- 閲覧数: 4170
Re: directX9について
エラーはいずれも「リンク時に必要な関数が存在していない」という内容で、足りない外部関数はいずれもVCに存在しているはずのものなので、プロジェクトの設定を変更して追加のライブラリを指定すればいいはずです。 (1) InitCommonControls関数はComctl32.libにあるので、これを追加すればいいでしょう。 (2) __vsnwprintf関数は、VS2015から別のライブラリに移されたらしく([anchor=note0 goto=note1]*1[/anchor])、あらたにlegacy_stdio_definitions.libをリンカに渡さなければならないようです。 それ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: directX9について
- 返信数: 6
- 閲覧数: 4170
Re: directX9について
おそらくなのですが、std::abs関数をdoubleあるいはfloat型の実引数で呼び出しているであろう箇所がいくつかあるにもかかわらず、<cmath>がincludeされていないということが原因でしょう。この場合、整数型に対するstd::absしか宣言されていないため、コンパイラはオーバーロードされたstd::absの解決にあたって、double(or float)→int,const long,const long longの変換を試みようとします。 しかし、このいずれの変換も実数型→整数型の縮小変換という意味では同等なので、コンパイラはいずれのオーバーロード関数にも優劣を決定できな...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: directX9について
- 返信数: 6
- 閲覧数: 4170
Re: directX9について
DirectXについてはほとんど回答できないのですが…
少なくともエラーメッセージを書いていただかないと、誰も答えようがないと思います。ただ、可能性として考えられるのは、
・SDL(Secure Development Lifesycle)の厳格化。
・外部ライブラリの静的バイナリがVS2010でコンパイルされていて、バイナリ互換性が失われている。
などが考えられますが、エラーメッセージを記述しなければ何ともいえません。
少なくともエラーメッセージを書いていただかないと、誰も答えようがないと思います。ただ、可能性として考えられるのは、
・SDL(Secure Development Lifesycle)の厳格化。
・外部ライブラリの静的バイナリがVS2010でコンパイルされていて、バイナリ互換性が失われている。
などが考えられますが、エラーメッセージを記述しなければ何ともいえません。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [初心者]配列、昇順について[急ぎ]
- 返信数: 7
- 閲覧数: 3085
Re: [初心者]配列、昇順について[急ぎ]
もう一度確認しますが、mpというのは、「i番目の要素以降の要素の中で最小のもの」の要素番号を指している必要がありますね?
mpが最初にとる値が1だとすると、i番目の要素が最も小さいときに、(2)で「要素番号が1の要素とiの要素を入れ替える」というコードを実行することになるのでは?
つまり、mp=1;のところをmp=i;に書き換えればいいのです。
mpが最初にとる値が1だとすると、i番目の要素が最も小さいときに、(2)で「要素番号が1の要素とiの要素を入れ替える」というコードを実行することになるのでは?
つまり、mp=1;のところをmp=i;に書き換えればいいのです。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [初心者]配列、昇順について[急ぎ]
- 返信数: 7
- 閲覧数: 3085
Re: [初心者]配列、昇順について[急ぎ]
アルゴリズムについて再度確認しましょう。
i=0から
(1) 配列mのi番目の要素以降の中で最小のもの(mp番目)を探索する。
(2) i番目の要素とmp番目の要素を交換する。
(3) iをインクリメントして、i=N-1(最後の一つ前)までそれを繰り返す。
というプログラム(アルゴリズムは選択ソート)を書きたいわけですよね。それでは、mpはi番目以降である(iが一番小さいのであればiそのもの)になるわけですから、mpのデフォルト値が1なのは「あれっ?」と思いませんか?
i=0から
(1) 配列mのi番目の要素以降の中で最小のもの(mp番目)を探索する。
(2) i番目の要素とmp番目の要素を交換する。
(3) iをインクリメントして、i=N-1(最後の一つ前)までそれを繰り返す。
というプログラム(アルゴリズムは選択ソート)を書きたいわけですよね。それでは、mpはi番目以降である(iが一番小さいのであればiそのもの)になるわけですから、mpのデフォルト値が1なのは「あれっ?」と思いませんか?
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: 引数を内部で判断する方法
- 返信数: 5
- 閲覧数: 3672
Re: 引数を内部で判断する方法
new Aと&bの結果の型はどちらもA*ですから、これらは型としては区別できません。 ただし、トリッキーで汚い方法であれば、マクロと文字列処理を利用すれば出来るかもしれないですね。下のコードは未検証ですが、引数に文字列を乗せてその文字列を整理して分類するという考え方自体は示せていると思います。 #include<cctype> #include<string> #include<algorithm> #define func(ARG) func_impl(ARG,#ARG) //本来ならstd::isspaceを直接remove_ifに渡せるはずなんですが… struct IsSpaceO...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: ■ 新年の挨拶トピック~2016~ ■ 今年の抱負 ■ [雑談]
- 返信数: 7
- 閲覧数: 9262
Re: ■ 新年の挨拶トピック~2016~ ■ 今年の抱負 ■ [雑談]
あけましておめでとうございます。今年も1年よろしくお願いします。
今年の目標は、新しく資格を取得することです。何の資格かはまだ決めてませんけどね。
今年の目標は、新しく資格を取得することです。何の資格かはまだ決めてませんけどね。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲーム特許について
- 返信数: 7
- 閲覧数: 14098
Re: ゲーム特許について
解決したトピックに書くというのもあれなんですが… 「個人で製作しているソフト程度であれば心配する必要はない」というのは少しリスクを低く見積もりすぎなのではないかと思います。UnisysのLZW特許問題のように、技術に触れる以上は常に特許に触れる危険性があるということは意識しておくべきですね。 その上で、ならばしっかりと特許は調査すべきなのかといえば、必ずしもそうとはいえないですね。大方の特許は特許庁のデータベースで検索することができますが、あのデータベースは前提知識なしでは絞込みを行うことも難しいので、個人ベースで事前に調査することは難しいですね。 それに、特許権者が権利行使をするにあ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: 空のinitializer_listに関して
- 返信数: 4
- 閲覧数: 2378
Re: 空のinitializer_listに関して
偶然です。空のinitializer_listにbegin()を呼び出した場合の戻り値はunspecified(不定)なので、どんな値であっても、というかどのようなことが起ころうと文句が言えないということになります。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: 文字置換
- 返信数: 3
- 閲覧数: 2933
Re: 文字置換
strlenを使えば文字列の長さが分かるので、それを使って末尾から4文字目のところのアドレスを求めて、そこから比較すればいいのではないでしょうか?
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: インクリメントについて
- 返信数: 6
- 閲覧数: 2902
Re: インクリメントについて
whileは条件式が真の間繰り返すという文です。「条件式が真」というのは、条件式が0以外の値の場合のことです。
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]クラス名の文字列からそのクラスのインスタンスを生成する方法
- 返信数: 1
- 閲覧数: 5372
Re: [C++]クラス名の文字列からそのクラスのインスタンスを生成する方法
C++には実行時に生成する型を決定してオブジェクトを作成する機構は言語には直接には組み込まれていませんので、一工夫が必要となります。C++でそれを実現しようと思えば、ちょっと面倒ですがstd::mapを応用すれば何とかなりそうです。 // サンプルなので使用していないですが、newしたオブジェクトはstd::shared_ptrなどのスマートポインタで管理したほうが安全でしょう。 class IObjectBuilder{ public: virtual IObject* Create() = 0; }; template<typename T> class ObjectBuilder : ...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]イテレータの扱いについて
- 返信数: 9
- 閲覧数: 4942
Re: [C++]イテレータの扱いについて
まず総論として、itevbaseがSTRINFO型ではないのであれば、最初のstd::multimapを使ったコードでは対処できないですね。multimapを使ったパターンで書くのであれば、根本からコードを書き換えたパターンを使うほうがいいような気がします。 それと、Visual Studioが2005であれば、usaoさんのコードはコンパイルできません。なぜなら、ラムダ式というC++11以降の規格でC++に追加された機能が使用されているからです。もちろん、ファンクタに置き換えれば通りますが… 次に各論として、std::multimap::equal_range()は、multimapの...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]イテレータの扱いについて
- 返信数: 9
- 閲覧数: 4942
Re: [C++]イテレータの扱いについて
できる限り質問者様のコードに添った形でやりたいことを実現できる方法を考えてみていたのですが、根本からコードを直してもよいなら、std::multimap<std::string,bool*>を使って、次のように初期化して、次のように取り出すのがいいのかなと思います。 // 以下のコードは、STRINFO::useflgの型がboolであることを前提としているため、そうでない場合はboolになっている場所をその型に書き換えること。 struct CStringComparer{ typedef bool result_type; typedef const TCHAR* first_argum...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]イテレータの扱いについて
- 返信数: 9
- 閲覧数: 4942
Re: [C++]イテレータの扱いについて
たとえば、itrchangeをstd::vector<STRINFO>からstd::vector<std::pair<STRINFO,std::list<STRINFO>::iterator> >に変更した上で、STRINFOとそれに対応するlistのiteratorをpairで管理するという方法があります。 その場合、itrchangeを構築する方法としては、 // <utility>ヘッダをincludeすること。 itrchange.reserve(pstrlist[1].size()); for(std::list<STRINFO>::iterator itr = pstrlist...
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【C++】vectorについて
- 返信数: 4
- 閲覧数: 6197
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【C++】vectorについて
- 返信数: 4
- 閲覧数: 6197
Re: 【C++】vectorについて
実際にコードを見てみないと的を射た回答をすることは難しいですが、可能性の1つとして考えられるのは、何らかの理由でbの領域が破壊的に書き換えられているということですかね…
〔追記:2015/7/20 0:29〕
できれば、構造体Aの定義とか、bを含むクラスのコードやabortするオブジェクトのスコープを含んだコードなど、関連しそうなコード片を示していただければ回答も得やすいのではないかと…
〔追記:2015/7/20 0:29〕
できれば、構造体Aの定義とか、bを含むクラスのコードやabortするオブジェクトのスコープを含んだコードなど、関連しそうなコード片を示していただければ回答も得やすいのではないかと…
- 8年前
- フォーラム: C言語何でも質問掲示板
- トピック: segmentation faultって何故出るのですか?
- 返信数: 4
- 閲覧数: 2985
Re: segmentation faultって何故出るのですか?
アクセスできない場所にアクセスしようとするからです。ちなみにx[100]とかが偶々アクセス可能な場所を示していた場合、変な場所のメモリが書き換えられたりしてたちの悪いバグの原因となります。
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: あるclassのメンバ変数にclassオブジェクトを持つ場合の一版的な実装方法
- 返信数: 3
- 閲覧数: 6707
Re: あるclassのメンバ変数にclassオブジェクトを持つ場合の一版的な実装方法
案3ってそんなに問題でしょうか?
確かにキャストをすればmutableな参照を作り出すことはできますが、const外しの明示的なキャスト自体がそもそも不自然なコードですからconst参照を返すのがご法度というのは言いすぎなような気がします。
確かにキャストをすればmutableな参照を作り出すことはできますが、const外しの明示的なキャスト自体がそもそも不自然なコードですからconst参照を返すのがご法度というのは言いすぎなような気がします。
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: エンターを押すたびに次のメッセージを表示する処理
- 返信数: 6
- 閲覧数: 4611
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: この掲示板について 【雑談】
- 返信数: 83
- 閲覧数: 36266
Re: この掲示板について 【雑談】
お久しぶりです。かつては常連だったはずなんですが、最近はそうでもなくなってきてしまってますね(笑)… さて、フォーラムルールを守らない質問・回答と、それを咎める投稿で殺伐とした雰囲気になっているということが問題になっているようですね。確かに投稿にあたってはフォーラムルールを守ることは必要なことだと思いますが、フォーラムルール違反の行為に対して単に「フォーラムルールを読め。以上」では、殺伐としてしまうのも仕方がないでしょう。 そもそも、フォーラムルールを知らなければ投稿するなというのは、ルールを知っている側の驕りではないかというのが僕の意見です。良識にしたがって、丁寧にやり取りをしている分...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++で戻り値の型推論
- 返信数: 7
- 閲覧数: 5573
Re: C++で戻り値の型推論
>774さん
概ねそんな理解でいいと思います。
概ねそんな理解でいいと思います。
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++で戻り値の型推論
- 返信数: 7
- 閲覧数: 5573
Re: C++で戻り値の型推論
解決済みのトピックに横槍入れて申し訳ありません。 あんまりうまい手ではありませんけど、 ユーザー定義の変換演算子 を使えば、それっぽいコードは書けます。 #include <cstdio> void get_(int &i){ std::scanf("%d",&i); } void get_(char &c){ std::scanf("%c",&c); } class returner{ public: template<typename T>operator T()const{ T t; get_(t); return t; } }; returner get(){ return ret...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: vectorにauto_ptrをpush_backできない
- 返信数: 2
- 閲覧数: 2074
Re: vectorにauto_ptrをpush_backできない
vector::push_backと同じ理由で次のコードはエラーになります。 #include<memory> using std::auto_ptr; void func(const auto_ptr<int>& ptr){ auto_ptr<int>ptr2(ptr); } int main(){ auto_ptr<int>ptr(new int); func(ptr); } というのも、auto_ptrのコピーコンストラクタはコピー元を破壊する(所有権を”むしりとる”)ので、引数がconst&ではなく単なる&になっているため、const&なオブジェクトを渡すことができないからです。p...
- 10年前
- フォーラム: D言語を広めよう
- トピック: D言語サンプルコード集
- 返信数: 0
- 閲覧数: 10124
D言語サンプルコード集
D言語のサンプルコードを投稿するためのトピを立ててみました。一つ目は、D言語によるWin32 COMサーバーサンプルプログラムです。 import core.exception; import core.sys.windows.windows; import core.sys.windows.dll; import std.c.windows.com; immutable HRESULT CLASS_E_CLASSNOTAVAILABLE = 0x80040111; extern(Windows) interface IComServer : IUnknown{ extern(Windows...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++]名前空間を使ったモノステートパターンについて
- 返信数: 6
- 閲覧数: 5680
Re: [c++]名前空間を使ったモノステートパターンについて
まず、include指令は単にそのファイルの内容をテキスト置換するだけです。翻訳単位はcppファイル毎に生成されますから、同じヘッダファイルをincludeしていたとしても、別々の翻訳単位にそれぞれ同じ「文字列」を挿入しているに過ぎません。 そのうえで、無名名前空間の内部で外部結合を指定するexternをつけて変数を宣言するとどうなるかといいますと、無名名前空間によってその変数名は翻訳単位ごとに一意の識別子としての扱いになってしまいます(そのおかげでファイルスコープとして扱える)ので、結局、同一ファイル・同一の名前空間に属する無名名前空間にある同じ名前の変数によってでしかその実体の解決は出...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: [c++]名前空間を使ったモノステートパターンについて
- 返信数: 6
- 閲覧数: 5680
Re: [c++]名前空間を使ったモノステートパターンについて
もしモノステートパターンをクラスで実装するとすれば、こういうコードになりますね。 class Keyboard{ private: //※ここ static int key[256]; public: void keyUpdate(){/*.....*/} int getKeyState(){/*....*/} private: //以下、インスタンスの生成を防止する。 Keyboard(); Keyboard(const Keyboard&); void operator=(const Keyboard&); }; ここで、名前空間での実装においては、名前空間Keyboardがclass...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: あるクラスを継承しているtemplate
- 返信数: 5
- 閲覧数: 2711
Re: あるクラスを継承しているtemplate
C++11であれば(C++03でもboostやtr1を用いれば)、テンプレートパラメータTに対して、TがCBaseを必ず継承していなければならないという制約を加えること自体は、(それに意味があるかどうかは別として…)type_traitsと部分特殊化を使って次のように書けば出来なくはないです。 #include <iostream> #include <type_traits> using namespace std; class CBase{ public: void basefunc(){ cout << "basefunc" << endl; } }; template<typenam...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: 本当にtry-catchで処理すべき問題??
- 返信数: 7
- 閲覧数: 4612
Re: 本当にtry-catchで処理すべき問題??
Ideone( http://ideone.com/eJW6Za )で実験したところ、setjmp/longjmpを以下のように使用すれば、確かに2回目のprintfの時点でiの値は0になりました。 #include <stdio.h> #include <setjmp.h> jmp_buf jbuf; int main(void) { int i = 0; if(setjmp(jbuf)==0){ i = 10; printf("(1) %d\n",i); longjmp(jbuf,1); }else{ printf("(2) %d\n",i); } return 0; } これはCの規...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: ライセンスについて
- 返信数: 8
- 閲覧数: 7750
Re: ライセンスについて
GPLは実行に要するすべてのものに対してGPLに従うことを要求しますけど、LGPLと他のライブラリを一緒に配布できない場合というのは、そのライブラリが持つライセンスによってLGPLで保護される部分が制限を受ける場合、なのでは? LGPL2.1の第5節において However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library)...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: ライセンスについて
- 返信数: 8
- 閲覧数: 7750
Re: ライセンスについて
ゲームAにおいてQtを利用していないクラスBをdllとして分離する。→BはQtの派生物ではない。だからBのリバースエンジニアリングは禁止できる。 いいえ、それは無理です。Qtは(商用版を導入しない限りは) LGPL v2.1 または GPL v3 の元で配布されていますが、LGPL2.1には次の一節があります。 For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing th...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ テンプレートのいろんな型を list に追加する方法
- 返信数: 10
- 閲覧数: 15307
Re: C++ テンプレートのいろんな型を list に追加する方法
「うまみがない」というのは、この場面においてtype-erasure法を使うことが果たして適切かどうかといえば、そうではないように思われるということです。type-erasureを使うのが効果的な場面は、共通のインターフェイスを持った、継承関係にない複数の型の処理をまとめるときでしょうね。 今回のように、ただフラグをまとめたいというだけで、関係のない型を無理矢理std::listに挿入するような使い方はまずしないですね。 「C++のコードの作法としては非常に良くない」というのは、type-erasure法に関係するところではなくて、サンプルコード全体を見たときに、C++としてはお行儀の悪...
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ テンプレートのいろんな型を list に追加する方法
- 返信数: 10
- 閲覧数: 15307
Re: C++ テンプレートのいろんな型を list に追加する方法
一応上記の方法でstd::listに任意の型の変数を持ったFlagを詰め込むことが出来ることは出来るんですが、その後の使い道を考えると、あまりうまくないというか何と言うか…
それと、C++のコードの作法としては非常に良くないので、そのあたりも注意していただきたいです(あくまで、サンプルコードということで…)
それと、C++のコードの作法としては非常に良くないので、そのあたりも注意していただきたいです(あくまで、サンプルコードということで…)
- 10年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ テンプレートのいろんな型を list に追加する方法
- 返信数: 10
- 閲覧数: 15307
Re: C++ テンプレートのいろんな型を list に追加する方法
type-erasure法でも使えば… // Flag -------------------- class Flag{ class FlagBase{ public: virtual ~FlagBase(){} }; template<typename _T> class FlagInternal : public FlagBase{ _T m_value; public: FlagInternal(_T t):m_value(t){} _T getFlagValue(){ return m_value;} }; FlagBase* m_flag; public: template<type...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 暗号機能つきテキストエディタ作成
- 返信数: 6
- 閲覧数: 3002
Re: 暗号機能つきテキストエディタ作成
とりあえず、質問内容から察するに、次の語句で調べてみると良さそうな気がします。
エディットコントロール
MDIウィンドウ
エディットコントロール
MDIウィンドウ
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: このtemplateの意味がわかりません
- 返信数: 5
- 閲覧数: 2334
Re: このtemplateの意味がわかりません
これは「Two Phase Name Look up」というテンプレートに関する名前探索によるものですね。規格上、コンパイラはテンプレートは定義時点と、インスタンス化される時点の2回に分けてテンプレートを解釈します。(VCはおそらくこれを無視してすべて(2)の時点で名前解決をしているから限定子がなくても通ってしまうのでしょう。しかしこれは規格違反です。) (1)テンプレート定義時点 テンプレート定義時点では、 テンプレート引数に依存しない部分 について解釈します。具体的には、; の漏れや、キーワードのスペルミスとかですね。また、テンプレート引数に依存しない名前について、その場で解決してしま...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: visual C++ 2010 expressの動作について
- 返信数: 5
- 閲覧数: 2538
Re: visual C++ 2010 expressの動作について
main関数の最後の行にブレークポイントを設定すればそこで止まります。
- 11年前
- フォーラム: 学生で集まってみる?
- トピック: 皆の開発環境は?
- 返信数: 22
- 閲覧数: 17227
Re: 皆の開発環境は?
僕もさらしてみますか。
Visual Studio系を使うときは、Visual C#/C++ 2008/2010EEおよび、2012EE for Desktopを使います。
GCC系は、TDM-GCCのw64向けのパッケージのMingwを使ってますね。それと、統合開発環境としてCode::Blocksを入れて使ってます。Code::BlocksはC++11にもある程度対応しています。
D言語に関しては、DegitalMarsのコンパイラと、D-IDEを使ってます。
テキストエディタは主にサクラエディタを使ってますね。今のところこんなところです。
Visual Studio系を使うときは、Visual C#/C++ 2008/2010EEおよび、2012EE for Desktopを使います。
GCC系は、TDM-GCCのw64向けのパッケージのMingwを使ってますね。それと、統合開発環境としてCode::Blocksを入れて使ってます。Code::BlocksはC++11にもある程度対応しています。
D言語に関しては、DegitalMarsのコンパイラと、D-IDEを使ってます。
テキストエディタは主にサクラエディタを使ってますね。今のところこんなところです。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: ■ 新年の挨拶トピック~2013~ ■ 今年の抱負 ■ [雑談]
- 返信数: 25
- 閲覧数: 11555
Re: ■ 新年の挨拶トピック~2013~ ■ 今年の抱負 ■ [雑談]
明けましておめでとうございます。
掲示板のほうではほとんど活動できてませんが、チャットなどのほうで活動させていただいてます。
今年の抱負ですけど、回答する頻度を少しでも増やすことと、プログラミングには関係ないですけど、日商簿記検定2級を取得することですね。その他の資格も、取れればいいなとは思いますけど。
今年も宜しくお願いします。
掲示板のほうではほとんど活動できてませんが、チャットなどのほうで活動させていただいてます。
今年の抱負ですけど、回答する頻度を少しでも増やすことと、プログラミングには関係ないですけど、日商簿記検定2級を取得することですね。その他の資格も、取れればいいなとは思いますけど。
今年も宜しくお願いします。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++の質問です
- 返信数: 3
- 閲覧数: 2160
Re: C++の質問です
boost::call_traitsはそもそもtemplate parameterを直に渡すべきでない この場合はboost::call_traits::param_typeは使えます。ですから、 template< typename T > class IHoge { public: virtual void Func(typename boost::call_traits<T>::param_type arg ) = 0; // 問題の部分 }; で大丈夫です。 boost::call_traits::param_typeを使うべきではないのは、テンプレート関数の実引数からテンプレー...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: ファイル出力すると文字化け(C言語)
- 返信数: 4
- 閲覧数: 3225
Re: ファイル出力すると文字化け(C言語)
質問するときは、コンパイル環境と、実行環境を書きましょう。書いてない場合、回答者の側がその現象を再現することができない場合があります。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]ADLについて
- 返信数: 13
- 閲覧数: 4825
Re: [C++]ADLについて
ADLが、テンプレートの実引数に侵入してくることによるメリットは、より特殊化・最適化された関数を呼び出せることがあるということでしょうね。というのは、 #include <iostream> namespace B { template< class T > struct HogeHoge { }; template< class T > void Foo( HogeHoge<T> const& ) { std::cout << "B::Foo" << std::endl; } } namespace A { struct Hoge { }; void Foo( B::HogeHoge<Hog...
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: [C++]ADLについて
- 返信数: 13
- 閲覧数: 4825
Re: [C++]ADLについて
一つ目の、クラスの内部で定義されたfriend関数が、ADLを通してでしか呼び出せないというのは、標準規格上正しい動作です。同じ事を聞いている質問が、stackoverflowのほうに有りました。
http://stackoverflow.com/questions/3593 ... eclaration
理由については、よく分かりません。
http://stackoverflow.com/questions/3593 ... eclaration
理由については、よく分かりません。
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数をマウス1クリックにつき一回だけ呼び出したい。
- 返信数: 4
- 閲覧数: 3114
Re: 関数をマウス1クリックにつき一回だけ呼び出したい。
このようにして、ひとつ前の状態を保存する変数を用意して、ひとつ前のコマで押されていなければ、RespondToMouseを呼び出すようにすればどうでしょう? while(1){ Mouse = GetMouseInput(); if( (Mouse & MOUSE_INPUT_LEFT) && !(prevMouse & MOUSE_INPUT_LEFT) ){ RespondToMouse(); } prevMouse = Mouse; }
- 11年前
- フォーラム: C言語何でも質問掲示板
- トピック: 質問
- 返信数: 4
- 閲覧数: 2069
Re: 質問
英語は言いたいことだけを簡潔に述べれば良いので…
Don't ask us only to give the answer of the question you have to solve! Only do we give some hints so as to lead you to solve it.
だけでいいはずです。
Don't ask us only to give the answer of the question you have to solve! Only do we give some hints so as to lead you to solve it.
だけでいいはずです。