タグ付けされた質問 「c++」

静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語であるC ++に関する質問。

3
C ++プログラムのWebエンドの作成
サーバー上のC ++プログラムとインターフェイスするためのWebエンドを作成するための最良の方法は何だろうと思っていました。最初は、Webサーバー側の言語(shell_exec()PHPなど)からシェル実行を使用するだけだと思っていましたが、「より良い」方法があるかどうか疑問に思っていました。多分もっとネイティブなものか、これは何らかの理由で悪い習慣ですか?

3
定数ローカル変数を静的(c ++)として定義するメリットはありますか?
void Animation::playAnimation() const { static const int index = 0; const std::string& animationFileName = m_animationContainer.getAnimationName(index); static const int zOrder = -1; static bool isLooping = false; AnimationBank::play(animationFileName, zOrder, isLooping); } 定数ローカル変数を次のように定義するメリットはありますstaticか?またはそれは不必要であり、悪い習慣ですらあります。
9 c++  c++11  c++14 

4
ライブラリにログを追加して、ライブラリを使用するプログラムのログシステムと簡単に統合できるようにする方法を教えてください。
私はそれを使用するプログラムのログで役立つ可能性のある多くの情報を含むライブラリを書いていますが、私のライブラリを使用するプログラムができるような方法でそれを公開する最良の方法がわかりませんライブラリのログを独自のログとシームレスに統合します(必要な場合)。 ライブラリに特定のロギングライブラリを選択すると、ライブラリを使用するための依存関係のリストに追加され、メインプログラムがそのライブラリに関連付けられます。メインプログラムで使用される複数のライブラリがこれを行った場合、それぞれが異なるライブラリを選択した可能性があります。 私は、プログラムでC ++ストリームオブジェクトをライブラリに登録して使用できるようにすることについて考えました。それは比較的一般的な目的のようですが、データがログに記録されるときにコンテンツとメタデータで呼び出されるコールバック関数をメインプログラムに登録することも考えました。別のオプションは、データを処理する必要があるときはいつでもメインプログラムが取得できるように、ログデータをライブラリ内のある種のリストに格納し、メインプログラムがデータを処理する時間を決定できるようにすることです。 自分の状況に最適なものを決定できるように、さまざまなアプローチの提案と長所/短所を探しています。
9 c++  logging 

4
「オブジェクトコンストラクター」は「名前が「object」の関数で、タイプが「object」を返す」の短い名前ですか?
つまり、関数とコンストラクタの呼び出しに違いがある以上に、単語を選択するということです。「オブジェクトのコンストラクタ」という名前のオブジェクトは、「名前をobject返す型を持つ関数」という名前でもかまいませんobject。 C ++では同じ関数と型名を使用できないと主張する人もいます。ただし、そのための回避策があります。C ++には特別な構文糖(コンストラクターと呼ばれます)があり、これを使用してobjecttypeを返す名前の関数を作成できますobject。ですから、コンストラクタは自立関数として見られ、使用できると思います。 ここに欠けている重要な意味上の違いはありますか?

5
C / C ++で記述されたアプリケーション間でメモリを共有する方法
ロボット工学の制御のために、C / C ++で書かれたプログラムを実行しています。基本的に、3つの異なるプログラムが同時に実行され、共有メモリを介して通信します。私が見つけた周りのグーグルリンギングは、vxWorksやboostライブラリのプロセス間ヘッダーのようなものだ(Boostのドキュメント:プロセス間でのメモリの共有)。 今、私は実装を見たくありません、上のリンクを読むことができます。しかし、boostライブラリがこれをどのように実行するかについて、頭を動かすことはできません。つまり、1つのアプリケーションがメモリを割り当て、他のアプリケーションがそのメモリにアクセスしますが、それらはどのように通信しますか?これを行うのは危険ではありませんか?
9 c++  c  memory  memory-usage  boost 

2
NANは、無効なパラメーターが計算に含まれていたことを伝えるのに適していますか?
私は現在、パフォーマンスが重要な環境に配備される数値処理システムに取り組んでいます。数値配列の形式で入力を受け取り(これらはeigenライブラリを使用しますが、この質問の目的では重要ではない可能性があります)、ある範囲の数値計算(行列積、連結など)を実行して出力を生成します。 すべての配列は静的に割り当てられ、そのサイズはコンパイル時にわかります。ただし、一部の入力は無効な場合があります。これらの例外的な場合でも、コードを計算し、無効な値によって「汚染されない」出力を使用する必要があります。 例として、次の簡単な例を見てみましょう(これは疑似コードです)。 Matrix a = {1, 2, NAN, 4}; // this is the "input" matrix Scalar b = 2; Matrix output = b * a; // this results in {2, 4, NAN, 8} ここでの考え方は、2、4、8は使用可能な値ですが、NANはデータの受信者に、そのエントリが無効な値を含む操作に関与していたことを通知し、破棄する必要があります(これは、std::isfinite(value)値を使用する前に確認してください)。 パフォーマンスが重要であり、ヒープ割り当てがオプションではない(そして、boost::optionalまたはポインターなどの他のリソースを消費する構成要素でもない)場合、これは使用できない値を通信および伝播する適切な方法ですか? これを行うより良い方法はありますか?この時点で私は現在の設定に非常に満足していますが、現在の実装についていくつかの新鮮なアイデアや生産的な批評を得ることを望んでいました。
9 c++ 

3
C ++で.netアプリをプログラミングすることをお勧めしますか
私が理解できることから、C#は.NETアプリをコーディングする際の事実上の言語です。C ++で.NETアプリ(ASP.NET、WinPhone 7、GUIなど)をプログラミングすることをお勧めしますか?この道を進むことを選択した場合の落とし穴と欠点は何ですか? 共有いただきありがとうございます。

1
プロファイリングツールが使用できない場合、プログラムのパフォーマンスを最適化するにはどうすればよいですか?
現在、パフォーマンスを改善したいOpenGlプログラムに取り組んでいます。パフォーマンスは大丈夫ですが、強力な専用GPUでは理想的ではありませんが、統合グラフィックス(<10 fps)ではひどいです。通常のプログラム(CPUベース、OpenGlまたは他のGPU APIなし)では、プログラムでプロファイラー(おそらくCLionに組み込まれているもの)を実行し、ほとんどの時間を費やしている場所を確認してから、より良いアルゴリズムで作業しますそれらのエリアの場合、またはそのエリアが呼び出される量を減らす方法を見つけます。 OpenGlプログラムでこの手法を使用すると、メインスレッド(最適化したいスレッド)でのプログラムの時間の大部分(約86%)がOpenGlドライバーの.soファイルに費やされていることがわかります。さらに、プログラムの実行中のCPU使用率は非常に低いですが、GPU使用率は95%から100%の間で停止します。これらの情報を総合すると、ボトルネックがGPUにあるため、最適化する必要があることがわかります。 ここで問題が発生します。ただし、プロファイラーを使用して私の最適化を導く通常のテクニックは、特定のGPUプロファイラーがないと機能しません。そのため、GPU処理時間が費やされている場所を教えてくれるプロファイラーを見つけるために、いくつかの調査を行いました。リモートで使用できるものは何も見つかりませんでした。すべてがWindowsのみ(Linuxのみを実行しており、プログラムはまだWindowsに移植されていません-ずっと先までは移植されません)であるか、更新されていないか、および/またはこのプロジェクトです。 そのため、私は質問します。関連するプロファイラーが存在しない場合、プログラムのパフォーマンスをどのように最適化できますか?問題がどこにあるのかを推測し、そこから最適化を試みましたが、最適化(錐台カリング)によってGPUの作業が約半分になっていることが確認できたとしても、違いはありませんでした。良い答えは、Linux上のOpenglに適用可能なプロファイリング手法を提供するか、プロファイラーなしで機能する手法を提供することです。

1
C ++プログラムでユーザースクリプトを安全にサンドボックス化する
私はC#で個人的なプロジェクトに取り組んでいますが、その目的は、ユーザーが他のユーザーが作成したスクリプトを実行して、そのスクリプトのアクセス許可を制限できるようにすることです。私のプログラムは、サードパーティのライブラリを使用してスクリプトをコンパイルし、.NETコードアクセスセキュリティメカニズムを使用してそれらをサンドボックス化し、ユーザーが付与したい権限のみがスクリプトにあることを確認します。 大まかに言って、私のセキュリティ要件は次のとおりです。 ユーザーは、信頼できないスクリプトのアクセスを、すべてのファイルシステムアクセスの禁止を含む、ファイルシステムの特定の部分のみに制限できる必要があります。 ユーザーは、信頼できないスクリプトのネットワーク接続を、すべてのネットワーク接続の禁止を含め、特定のIPアドレスまたはホスト名のみに制限できる必要があります。 ユーザースクリプトがホストアプリケーションをハングまたは終了させることができても問題ありませんが、ユーザースクリプトは権限の制限を回避できてはなりません(つまり、サービス拒否は問題ありませんが、違反は許されません)。 私は一種の個人的な演習として、C ++で同様のことをしようと考えています。明らかに、ユーザースクリプトがLuaのようなスクリプト言語で書かれている場合でも、ネイティブコードを直接実行すると、状況はさらに複雑になります。 最初に考えられるアプローチは、スクリプト環境の標準ライブラリ関数に独自のフックを挿入することです。たとえば、スクリプト言語がLuaの場合、io.openを通常に公開する代わりに、スクリプトの権限に対して引数をチェックするラッパーを公開してから、それらを元の実装に渡す必要があります。 このアプローチに対する私の懸念は、セキュリティを担当する自分自身のコードの量が大幅に増加することです。そのため、私が書いた潜在的なセキュリティの脆弱性があります。言い換えると、.NET CASを使用する場合、自分のサンドボックスコードを信頼する必要があるのではなく、Microsoftがサンドボックスコードでうまく機能したことを信頼できます。 私が知らない代替案はありますか?
8 c++  security 

7
ネストされたループ内から「続行」するためのベストプラクティスは?
これは簡略化されたサンプルです。基本的に、文字列リストから文字列をチェックします。チェックにパスすると、その文字列(filterStringOut(i);)が削除され、他のチェックを続行する必要がなくなります。したがってcontinue、次の文字列に。 void ParsingTools::filterStrings(QStringList &sl) { /* Filter string list */ QString s; for (int i=0; i<sl.length(); i++) { s = sl.at(i); // Improper length, remove if (s.length() != m_Length) { filterStringOut(i); continue; // Once removed, can move on to the next string } // Lacks a substring, remove for (int …

3
継承を使用してクラスをテストする正しいアプローチは何ですか?
私が以下の(過度に単純化された)クラス構造を持っていると仮定します: class Base { public: Base(int valueForFoo) : foo(valueForFoo) { }; virtual ~Base() = 0; int doThings() { return foo; }; int doOtherThings() { return 42; }; protected: int foo; } class BarDerived : public Base { public: BarDerived() : Base(12) { }; ~BarDerived() { }; int doBarThings() { return …

2
Cが同じ変数の複数のグローバル宣言を許可し、複数のローカル宣言を許可しないのはなぜですか?
グローバル変数を複数回宣言すると、コンパイラは警告を出力しません。 ただし、たとえば関数内でローカル変数を複数回宣言すると、gccコンパイラーはエラーを出力し、ファイルをコンパイルしません。(私はgccに関して質問しますが、これはより一般的な言語設計の質問であり、gccについての質問ではありません。他のコンパイラーが同様に動作する可能性があるためです)。 この動作の説明は何ですか?

1
C ++のイテレータカテゴリは、UTF-8イテレータアダプタの作成を禁止していますか?
私はUTF-8イテレーターアダプターに取り組んでいます。つまり、イテレータをaに、charまたはunsigned charシーケンスをイテレータからシーケンスに変換するアダプタを意味しchar32_tます。ここでの私の仕事は、オンラインで見つけたこのイテレータに触発されました。 ただし、独自の実装を開始するときに標準を調べたところ、C ++がイテレータに課す要件に準拠しながら、このようなアダプタを実装することはできないようです。 たとえば、InputIterator要件を満たすUTF-8イテレータを作成できますか?はい。ただし、指定されたイテレータ自体がInputIteratorではない場合に限ります。どうして? InputIteratorは、同じイテレータを複数回逆参照する機能を必要とするためです。それらがすべて等しい場合、そのイテレータの複数のコピーを逆参照することもできます。 もちろん、UTF-8イテレーターアダプターを逆参照するには、基本イテレーターの逆参照と、場合によっては増分を行う必要があります。そして、そのイテレーターがInputIteratorである場合、元の値をインクリメントした後に戻すことはできません。また、コピーが機能する必要があるという事実char32_tは、以前にデコードされた値を表すをローカルに保存できないことを意味します。あなたはこれを行うことができたでしょう: auto it = ... auto it2 = it; //Copies an empty `char32_t`. *it; //Accesses base iterator, storing `it.ch`. *it; //Doesn't access the base iterator; simply returns `it.ch`. *it2; //Cannot access `it.ch`, so must access base iterator. わかりました。InputIteratorsは使用できません。しかし、ForwardIteratorはどうでしょうか?UTF-8文字シーケンスでForwardIteratorを適応できるForwardIteratorアダプターを作成することは可能ですか? またはを生成するに*itは操作が必要なため、これも問題です。InputIteratorsはに変換可能である何かを吐き出すことができますが、[forward.iterators] /1.3実際の参照を提供するために必要とされます。value_type&const value_type&value_typeForwardIterator Xが可変イテレータである場合、referenceはへの参照Tです。Xが定数イテレータの場合、referenceはへの参照ですconst T ここでの唯一の手段は、そのようなすべてのイテレータがを持ち運ぶchar32_tことです。これは、その参照用のストレージを提供するためだけに存在します。その場合でも、イテレータインスタンスがインクリメントされ、逆参照されるたびに、その値を更新する必要があります。これは古い参照を事実上無効にし、標準はそれを明示的に許可していません(無効化はイテレータが破棄された場合、またはコンテナがそうした場合にのみ発生します)。 …
8 c++  c++11  unicode  utf-8 

1
組み込みシステムの構成メニューの設計上の考慮事項
私は、いくつかのボタンと小さなグラフィックディスプレイでユーザーとインターフェイスする組み込みシステムに取り組んでいます。 余談ですが、私は組み込みシステムを使用しているので、動的なメモリ割り当てをできるだけ回避したいと思います。std :: vectorのようなものは利用できません。 次のように、クラシックなネストされたメニュー構造を使用して構成メニューを実装する必要があります。 Level A Node 1 -> Level B Node 1 -> Level C Node 1 -> Level B Node 2 -> Level B Node 3 Level A Node 2 Level A Node 3 ここでの最善のアプローチについてはよくわかりません。複合パターンを使用するなど、このようなものにアプローチするいくつかの方法について読みました。しかし、私はいつも「紙の上」では良さそうに見えても、実装するのは面倒そうなものにぶつかります。 私の一般的な考えはMenuNode、初期化時にそのサブノードと親ノードについて知っているクラスを持つことです。Menuクラスは、ノードナビゲーションおよび処理を扱うことができます。明らかに、すべてMenuNodeが次のような特定の動作を実行/実装する必要があります。 Menu何を表示したいかを報告します(実際のレイアウト/配置はの問題ではありませんMenuNode)。 ユーザー入力に反応する(値を増減する/ボタンを押すなど) 関心のある実際の値にアクセスする(ApplicationSettingsクラスに属している) これを実装する最良の方法は何でしょうか? (抽象的な)MenuNode基本クラスを使用して、すべてのメニューノード項目のサブクラスを作成します。初期化中に、ApplicationSettings必要になる可能性のある他の依存関係へのポインタを提供できます。どういうわけか、それぞれが一度だけインスタンス化される10個の派生クラスを作成するのは間違っていると感じています。 MenuNodeすべてのノードに同じクラスを使用し、関数を解放するコールバックを通じて機能を実装します。私が読んだことから、そのかなり一般的なものは、自由な関数をオブジェクトと「結合」することです。しかし、それは物事を複雑にしてしまうような気がします。ReportButtonPress()などのメンバーごとに、初期化中に実際の実装のコールバックを提供する必要があります。 ここで見落としているものがあると思います。

4
メンバー関数がクラスプロパティ/メンバー変数を使用しない場合、OOP原則に違反しますか?
私は、ファイルを開いたり、読んだり、書き込んだりできる相互作用する既存のクラスを持っています。そのためにファイルの変更を取得する必要があります新しいメソッドを追加する必要があります これが私のクラス定義で、新しいメソッドを追加したいとします。 class IO_file { std::string m_file_name; public: IO(); IO(std::string file_name); + time_t get_mtime(file_name); + OR + time_t get_mtime(); }; 2つのオプションがあります- 空のオブジェクトを作成してから、ファイルの変更時刻を取得するメソッドの引数にfile_nameを渡します。 オブジェクト構築時にファイル名を渡し、単純にメンバー変数を操作するメンバー関数を呼び出します。 どちらのオプションも目的を果たします。また、2番目のアプローチは最初のアプローチよりも優れていると思います。しかし、私が理解していないのはどのようにですか?メンバー変数を利用しないので、最初のアプローチは悪いデザインですか?オブジェクト指向設計のどの原則に違反しますか?メンバー関数がメンバー変数を使用しない場合、そのメンバー関数は常に静的にする必要がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.