2

重複の可能性:
「……」トークンの意味は何ですか?

関数型を直接指定する(少なくともテンプレートパラメーターとして)比較的新しい方法があります。これが厳密にC++11であるかどうかはわかりませんが、GCC4.7のSTLヘッダーを読んでいるときに遭遇しました。

こんな感じです:

std::function<void(int, char**)> f;

そして今、ヘッダーファイル<functional>に次のように表示されます。

template <typename R, typename... A>
struct SomeStruct<R(A...)> { /* */ };

SomeStructこれは理解できます:戻り型Rと引数の型を持つ関数型の明示的な特殊化A

しかし、この宣言(次の行)を検討してください。

template <typename R, typename... A>
struct SomeStruct<R(A......)> { /* */ };

その二重省略記号はどういう意味ですか?

4

1 に答える 1

3

個人的には不明確だと思いますが、これらが同等であることがわかっている場合は、より理にかなっています。

void example(int, char, ...); // C-style variadic arguments
void example(int, char...);   // equivalent: the comma before the ellipses is optional

したがって、その特殊化は、関数が次の形式をとる場合をカバーしているだけです。

R(A..., ...)

sprintf: Ris intA...is char*and const char*、および it's C スタイルの可変個引数など。

于 2012-07-11T06:42:03.590 に答える