問題タブ [stdtuple]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
2468 参照

c++ - 比較関数をどのように構成しますか?

特にC++での並べ替えでは、より大きな構造を比較するために一連のフィールドを比較している状況に頻繁に遭遇します。簡単な例:

私の本能的なアプローチは、特に3つ以上の分野では面倒に思えます。この一連の比較をC++でどのように構成しますか?他の言語は、より簡潔またはエレガントな構文を提供しますか?

0 投票する
20 に答える
102412 参照

c++ - std::tuple の要素をどのように反復処理できますか?

(C++11 を使用して) タプルを反復処理するにはどうすればよいですか? 私は次のことを試しました:

しかし、これは機能しません:

エラー 1: 申し訳ありませんが、実装されていません: 'Listener ...' を固定長の引数リストに展開できません。
エラー 2: i は定数式には使用できません。

では、タプルの要素を正しく反復処理するにはどうすればよいでしょうか?

0 投票する
2 に答える
1156 参照

c++ - C++0x Tuples Store Elements Backwards

After a bit of investigation, I found that C++0x stores the elements in a tuple backwards in memory.

For example, take this code:

When compiled with the GCC 4.5.2, I get the following output:

This initially puzzled me. Why is the data stored backwards? After hunting through GNU's unintentionally obfuscated headers, I noticed that the implementation was similar to this:

Because the base class contains the last element, then the next derived class contains the second to last, etc., the actual order of the template arguments is reversed.

When I first got into tuples, I thought that I could use them for a function like glInterleavedArrays(), which sets an array of vertex data as tuples of colors, texture coordinates, normals, and points. Of course, if I make an array of tuples, this data will have to be inputted in reverse, which can result in really weird bugs if you happen to forget to put the arguments in the right order.

What about something like this, then?

Under the GCC 4.5.2:

error: parameter pack argument ‘head ...’ must be at the end of the template argument list

Unless this becomes available in the future, I'm pretty much stuck on finding another way to implement this. Is there another way? Some way to trick the GCC into getting a properly-ordered tuple memory-wise?

0 投票する
6 に答える
65471 参照

c++ - メンバーが2つしかないstd::pairとstd::tupleの違いは?

メンバーが 2 つだけのstd::pairと の間に違いはありますか? ( 2 つだけのメンバーを必要とし、多かれ少なかれ持つことができるstd::tupleという明白なことに加えて...)std::pairtuple

0 投票する
3 に答える
3309 参照

c++ - std :: tupleの実装に再帰的な継承を使用するのが適切でないのはなぜですか?

この質問で、ハワード・ヒナントは言っ

std :: tupleの一部の実装では、再帰的継承を使用します。しかし、良いものはそうではありません。;-)

誰かがそれに光を当ててくれませんか?

0 投票する
3 に答える
2772 参照

c++ - ISOC++標準のstd::tupleのデフォルトのコンストラクター記述と混同されています

規格によるとstd::tuple、以下のメンバー機能があります

誰かが何のために起こることになっているのか説明してもらえますかstd::tuple<>

0 投票する
2 に答える
998 参照

c++ - インプリメンタータプルからラッパータプルを構築する方法は?

C++ で実装された、いくつかのインプリメンター クラス (impl) とユーザー用のラッパーがあります。impl とラッパーを 2 つの異なるタプルに保持して、1 つの割り当てで impl を初期化できるようにしたいと考えています。(他にも理由があります:)。

問題は、Visual Studio 2012 標準ライブラリのタプル クラスでは、ラッパーの const 参照コピー コンストラクターがないと、ラッパー タプルを構築できないことです。悲しいことに、その場合、次のように const_cast する必要があります。

上記のコードは意図したとおりにコンパイルおよび実行されますが、ラッパー クラス A の const-ref-ctor を削除またはコメント アウトすると、VS2012 コンパイラも gcc4.7.2 コンパイラもコードをコンパイルしません。(1) 私は何を間違っていますか?

私は c++11 の適切なドキュメントを持っていないので、タプルの可変引数コピー ctor は他のタプルの const ref のみを取ると思います。もしそうなら、(2)タプルクラスにそのようなctorがないのはなぜですか?背後にある主な理由を意味します。

要約すると、単一のアクション (つまり、make_shared) で割り当てることができるように、すべての impl とラッパーをタプルにまとめる必要があります。コンパイル時に型で検索できるようにいくつかのヘルパーを作成したため、タプルはやや必須です (例: Get<A<int>>(w)) (3) 各 impl を個別に割り当てる必要がないように、impl への参照を保持するきちんとした方法はありますか? .

0 投票する
2 に答える
435 参照

c++ - std::tuple の実装は、空のクラス要素の派生からベースへの変換をトリガーして失敗することを許可されていますか?

このコードは GCC4.7 ではコンパイルできません

AGCC は空の基本クラスの最適化を利用するために派生するためです。ただし、それによりGCCが選択f(A)して不平を言います

エラー:'A'アクセスできないベースです'tuple<A>'

このエラーは C++ 標準によって許可されていますか、それとも単に libstdc++ のバグですか?

0 投票する
2 に答える
740 参照

c++ - タプルとboost.fusionを使用する場合、構造体を使用する理由はありますか?

タプルは構造体に似ています(ここで説明:Boost :: Tuples vs Structs for return values)。唯一の利点は、構造体が数字ではなく短く、キーで記述できる方が便利なことのようです。

フュージョンマップと構造体を使用して、構造体をシミュレートするための戻り値として、キーBoost::TuplesとStructsでアクセスすることもできます。もう少し書きます。

パフォーマンスにもペナルティはないようです。ビューを使用するため、フュージョンの方が高速な場合があります。

したがって、構造体を使用する唯一の理由は、コードをさらに数行記述したくない場合と、コードを読みやすくしたい場合です。

0 投票する
1 に答える
390 参照

c++ - タプルのアンパックによって署名が取得された静的メソッドのアドレスをコールバックとして渡します

Lambdaをコールバックとして渡す必要があります(特にWinAPIの場合)。アイデアは次のとおりです。

  1. ラムダをシングルトンクラスに格納する(すべてのラムダ、2つの同一のものも異なるタイプを持つ)ので、安全である必要があります

    LambdaSingleton<Lambda_Type>::instance = l;

  2. ラムダインスタンスを呼び出す静的メソッドのアドレスをコールバックとして渡します。

    /li>

コンパイル時に関数に関する情報を抽出するための作業クラスがすでにあります。

だから私はこのようなものを手に入れるでしょう:

コンパイラにコールバッククラスの特殊化を生成させるだけでよいので(実際にはそのメソッドを呼び出さないでください)、このサイトの他の質問で提案されている反復アンパック手法をどのように適用できますか?

ありがとうございました