ページ 1 / 1
たくさんの...は何ですか
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
Stroustrup
https://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」... )