問題タブ [variadic]

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 投票する
2 に答える
1634 参照

sql - plpgsqlで、可変数の識別子を使用してコマンド文字列を作成および実行するにはどうすればよいですか?

postgres 9.1では、インデックス名、テーブル名、および可変数の列を受け取り、インデックスを作成してから、他のことを行う関数を作成したいと思います。

私の現在のアプローチは、plpgsqlを使用して、実行する動的コマンドを作成することです。quote_identただし、すべての識別子を保護するために使用しようとすると、つまずきます。これまでのコード:

1つの列名を渡すとコードは成功したように見えますが、2つ以上あると、次のエラーが発生します。

私は何が間違っているのですか?(おそらく、formatまたは私の使用で何かVARIADIC。)

ありがとうございました!

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

python - DLL がこの関数をコールバックとして呼び出せるように、ctypes を使用して可変個引数 Python 関数のプロトタイプを作成できますか?

シナリオは次のとおりです。ctypes を使用して、C DLL を Python プログラムにロードしています。コールバックを登録して、DLL のコードが Python の関数を呼び出せるようにしたいと考えています。

関数を可変長にしたいまで、これはすべて素晴らしいことです。たとえば、Python で「printf」を実装したいとします (引数のために、整数を返すようにもします)。

ctypes の CFUNCTYPE ファクトリを使用して、コールバック関数ポインタを作成しています。

もちろん、入力引数 (Unicode char 配列としてのフォーマット文字列) を 1 つしか指定していないため、コールバックは機能しますが、*args空です。

それで、ctypesでこれを機能させる方法はありますか、それとも可変引数コールバック関数を必要としないようにCコードを書き直す必要がありますか?

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

c++ - C++ 可変個引数テンプレートで可変引数を渡す

可変引数を受け入れ、それらの引数で他の関数を呼び出すテンプレート関数があるとします...

...そして、他の関数は次のように定義されています...

std::string 引数を指定して func() を呼び出すと、std::string 引数を取る x() と y() の一致が見つからないため、これはコンパイルされません。

func() は、いくつかの外部基準 (この例ではパラメーター i の値) を使用して、パラメーター引数を渡す他の関数を決定することに注意してください。

パラメータ引数を std:tuple に詰め込み、それを渡すようなことに頼らずにこれをやってのける方法はありますか?

[編集]

わかりました、私は自分の目的に十分に適したアプローチを見つけました。説明するクラスの例を次に示します...

a() および b() の可変個引数テンプレート メソッドは、引数が単一の int ではない Xx() への呼び出しをキャッチします。これにより、受け取っていたコンパイラ エラーが解決され、探していたより単純なクラス API が有効になります。

0 投票する
4 に答える
265 参照

c++ - C++ 変数引数

ステート マシンを持つクラスがあり、イベントをステート マシンに渡す単一のエントリ ポイントが必要です。イベントにはイベント固有のデータが付随しており、これをハンドラーにディスパッチしたいと考えています。だから、それはこのようなものに見えます...

};

...このような呼び出しで...

テンプレート関数を取得して正しいハンドラーを呼び出す方法がわかりません。単純に eventId をオンにして可変引数を渡すと、すべてのパラメーターの組み合わせに対してハンドラーが存在しないため、コンパイルされません (たとえば、eventB() 引数を受け入れる eventA() ハンドラーはありません)。とにかく欲しい)。

これを行うためのエレガントな方法があると思いますが、それは私を避けています。

0 投票する
4 に答える
2047 参照

c++ - 関数とその(任意の型、任意の数の)引数を格納するためのクリーンな方法

ライブラリの場合、関数が別の関数とその引数を受け入れ、後で呼び出すためにそれらをすべて保存するようにします。引数は型の任意の混合を許可する必要がありますが、関数はvoidを返すだけで済みます。このようなもの:

1つのアプローチは、DelayedCaller :: setup()にstd :: functionを受け入れさせ、私のライブラリユーザーにsetup()を呼び出す前にstd :: bind()を使用させることです。ただし、ユーザーが自分でバインディングを行う必要がないようにsetup()を実装する方法はありますか?

編集:DelayedCallerは既存のクラスです。setup()は、追加したい新しい静的メソッドです。

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

c++ - 列挙型クラスと通常の列挙型を区別するためのC++11タイプの特性

boost :: promptに似ていますが、C++11用のプロモーションテンプレートエイリアスを作成しています。これの目的は、varidic関数から引数を取得するときの警告を回避することです。例えば

プロモートテンプレートエイリアスは、可変個引数のデフォルトの引数プロモートに従って型をプロモートします。1)intよりも小さい整数がintにプロモートされます。2)floatがdoubleにプロモートされます。

私の問題は、標準のC ++列挙型はプロモートできますが、C ++ 11列挙型クラスはプロモートされないことです(コンパイラーは警告を生成しません)。Promoteを通常の列挙型で動作させたいのですが、C++11列挙型クラスを無視します。

プロモートテンプレートエイリアスの列挙型クラスと列挙型の違いをどのように見分けることができますか?

0 投票する
4 に答える
994 参照

c++ - C ++およびプリプロセッサマクロ:可変個引数型

たとえば、次のマクロを考えてみましょう。

_CREATE_VAR異なる変数引数と対応する名前を持つ複数のインスタンスを持つ代わりに、1つのマクロを使用してこれを単純化する方法はありますか?_CREATE_VAR理想的には、引数の数に関係なく、同じマクロを自動的に呼び出したいと思います。

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

c++ - GCC 4.8 は可変個引数テンプレート パラメーター パックを逆にしています

GCC 4.8 にアップグレードしたところ、一部の可変個引数テンプレート コードが正しくコンパイルされなくなりました。以下に最小限の例を作成しました。

この出力は (GCC 4.6.3/4.8 の間違ったバージョンをコメントアウトした場合) 'a' になります。

GCC 4.6.3 によって生成されるエラーは次のとおりです。

GCC 4.8 によって生成されるエラーは次のとおりです。

GCC 4.8 では、展開時に可変個引数のテンプレート タイプが逆になっているようですが、奇妙なことに、出力で証明されているように「実際には」逆にはなりません。順序に関係なく「a」になります。Clang 3.3 は GCC 4.6.3 の出力と一致します。

これは GCC 4.8 のバグですか、それとも何か他のバグですか?

編集: ここで GCC にバグ レポートを追加しました: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56774

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

c++ - スレッド化された cout に渡される、さまざまな型の可変個引数関数

まず第一に、これは機能しますが、非常にバグがあります。intsfloatsdoubles、 、stringsが取れるようにしたいchar*s。すべてをchar *として試すことで機能しますが、それが失敗した場合は、別のタイプとして再試行したいと思います。また、パラメーターの数を渡す必要がなかったらいいのにと思います。(もっと下に)

さて、とにかく次のことはありますか:

  1. スレッドが再結合するときにメインプログラムをクラッシュさせたりハングさせたりすることなく、スレッドをコンソールに出力します (スレッドプール?)
  2. 使用: logHelperMessage(logLevel,firstpram,...)(最初のパラメーターを使用してそのメモリ位置を取得し、そこから移動しますか?)
  3. で:ss << va_arg(messages,char*);それがうまくいかない場合は、char*何か他のことを試してみてください?

より高度な varidic 関数を探しましたが、それらはすべて引数の数の pramiter を必要とするようです。または 1 つのタイプのみを許可します。また、連続ループが必要な場合は、プログラムの別の場所にループを設定します。(これで全部だと思います)

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

c - c 変数関数の混乱

va_start()、va_arg() マクロの背後にあるものを把握しようとしています。以下のコードはうまく機能します。

予想どおり、次のような出力が得られました: 3 4 5 6 7 8 9. 次に、そのマクロの定義を見つけました (インターネットでは、ヘッダー stdarg.h が不思議なため、マクロ va_arg(v, l) を _builtin_va_arg( のように定義します) v、l)、最後は定義されておらず、stdarg.hには何も含まれていないため、ライブラリにあるのですか???)。それにもかかわらず、「cstdarg」の代わりに私は書きました:

出力は 1 -0.0409377 -0.0409377 4.88084e-270 4.85706e-270 1 2 3 4 5 6 7 8 9 のように奇妙になりました。可変引数は最後に宣言されたパラメータのすぐ隣に配置されていると思いましたが、どうやらもっと複雑なパラメータがあるようです状況。どこが間違っているのか、実際に何が起こっているのかを誰かが明らかにしてくれたら、とてもうれしいです。