ページ 11

たくさんの...は何ですか

Posted: 2017年2月22日(水) 15:28
by JAT
下記C言語文に存在する四つの「...」に意味不明です。

コード:

template<class... Args>  void f(Args... args) {  
    auto x = [args...] { return g(args...); };  
    x();  
}  
出所:
https://msdn.microsoft.com/ja-jp/library/dd293608.aspx

ご存知の方教えてくださいませんか。

Re: たくさんの...は何ですか

Posted: 2017年2月22日(水) 21:02
by Math
... はコンピュータでは”たくさんの”を意味します。It's means " ... is many"(たくさんとは複数のという事です)

使われているコンテキストからC++11のラムダ式 のC++14拡張のcapture の話から Templateと飛躍を重ねて とても難しくみえるのですが。
まず ラムダ式 については ご存知でしょうか。

Re: たくさんの...は何ですか

Posted: 2017年2月22日(水) 21:20
by Math
http://dixq.net/forum/viewtopic.php?f=3&t=18870のNo.18 に たくさん 使われている
 => がC# の ラムダ式 です。C# やVisualBasic では古くから使っていますがC++はようやく追いついてきた感じです。

Re: たくさんの...は何ですか

Posted: 2017年2月22日(水) 21:40
by inemaru
手っ取り早く、意味を知りたいのでしたら
下記のキーワードを調べると良いです。
提示されているコード中で、ラムダ式が使用されていますが
質問内容は、「...」(エリプシス)の意味なので省略します。
オフトピック
JAT さんが書きました:下記C言語文に存在する四つの「...」に意味不明です。
提示されているコードは、C++(C++14以降)のものであり、C言語ではありません。
今回の回答は、C++を前提とした回答となります。

Re: たくさんの...は何ですか

Posted: 2017年2月22日(水) 23:32
by inemaru
Math さんが書きました:... はコンピュータでは”たくさんの”を意味します。It's means " ... is many"(たくさんとは複数のという事です)
これは、間違っています。(少なくともC++では)
0個である可能性もある為
正しくは、「省略」を意味します。

https://cpprefjp.github.io/lang/cpp11/v ... lates.html

Re: たくさんの...は何ですか

Posted: 2017年2月23日(木) 18:01
by hoge
出所として示した所の直前に説明があるじゃん。翻訳の質は悪いが。

Re: たくさんの...は何ですか

Posted: 2017年2月23日(木) 18:26
by Math
https://msdn.microsoft.com/ja-jp/library/dn439779.aspxここに省略記号 (...) と書いてありますね。
最初よんだのに見落としていました。
それにしても”次のcapture可変個引数テンプレートの例に示しているように、の後ろに省略記号を付けると、パックの展開を意味します。”とは難解な日本語翻訳(機械翻訳だから?)ですよね!

Re: たくさんの...は何ですか

Posted: 2017年2月23日(木) 22:12
by Math
Stroustruphttps://ja.wikipedia.org/wiki/%E3%83%93 ... 3%E3%83%97
によれば [さらに引数があるかもしれないことを意味する省略記号(...)] です。
MSDN の説明は”A capture followed by an ellipsis is a pack expansion, as shown in this variadic template example”
であり
pack expansionつまり”パック展開”の例としてprint文が分かりやすいといっています。
[パック展開例]

コード:

//可変個引数テンプレート関数の機構について説明するには、これを使用して printf の機能の一部を変更するのが最も適切です。

#include <iostream>  
  
using namespace std;  
  
void print() {  
    cout << endl;  
}  
  
template <typename T> void print(const T& t) {  
    cout << t << endl;  
}  
  
template <typename First, typename... Rest> void print(const First& first, const Rest&... rest) {  
    cout << first << ", ";  
    print(rest...); // recursive call using pack expansion syntax  
}  
  
int main()  
{  
    print(); // calls first overload, outputting only a newline  
    print(1); // calls second overload  
  
    // these call the third overload, the variadic template,   
    // which uses recursion as needed.  
    print(10, 20);  
    print(100, 200, 300);  
    print("first", 2, "third", 3.14159);  
}  
  
//出力
//--------------------------------------------------------------------------------
// 1  
// 10, 20  
// 100, 200, 300  
// first, 2, third, 3.14159  
(That is the answer to the questioner.)

Re: たくさんの...は何ですか

Posted: 2017年2月23日(木) 22:44
by Math
MSDNのタイトル”楕円および可変値引数テンプレート”の”楕円”は

[ellipsis =省略記号] の誤訳と思われます。     ( 「楕円=ellipse」... )