C/C++可変パラメータ関数の実現
一、変長パラメータ関数
頭ファイル:萼include<stdarg.h>
関数宣言
エッジパラメータテンプレートはテンプレートの再帰的展開モデルに相当するが、再帰的なものではない。使用する場合は、「再帰」の輸出を定義し、一連の操作を定義します。操作は「再帰」の方式で行います。
再帰関数方式が展開され、テンプレートが導出された時に、再帰的に展開され、最後にパラメータがない時に定義された一般関数で終了します。
最後に正しいアキュムレータを書きます。
可変パラメータタイプのテンプレート、右値の参照と完璧な転送については、このブログhttps://www.jb51.net/article/95152.htmを参照してください。時間があれば、後でどうすればいいですか?
ここでC/C++可変パラメータ関数の実現に関する記事を紹介します。これに関連して、C/C++可変パラメータ関数の詳細を紹介します。以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。
頭ファイル:萼include<stdarg.h>
関数宣言
int add(int count, ...);
関数の定義
int add(int count, ...)
{
va_list va;
va_start(va, count);
int sum = 0;
for (int i = 0; i < count; i++)
sum += va_arg(va, int);
va_end(va);
return sum;
}
関数の呼び出し
int main()
{
cout<<add(5, 1, 2, 3, 4, 5)<<endl;// 15
return 0;
}
二、C+11の新しい特性が、パラメータテンプレートを長くします。エッジパラメータテンプレートはテンプレートの再帰的展開モデルに相当するが、再帰的なものではない。使用する場合は、「再帰」の輸出を定義し、一連の操作を定義します。操作は「再帰」の方式で行います。
再帰関数方式が展開され、テンプレートが導出された時に、再帰的に展開され、最後にパラメータがない時に定義された一般関数で終了します。
void test()
{
cout << "test()" << endl;
}
template < class T, class... Args>
void test(T first, Args... args)
{
cout << typeid(T).name() << " " << first <<endl;
test(args...);
}
test<int, int, long>(1, 2, 3L);
//
int 1
int 2
long 3
test()
うん?最初のtest()は、test関数として再帰的に呼び出された最後であるべきである。もう一度テストします
template < class T>
void test(const T &t)
{
cout << "test()"<<t << endl;
}
template < class T, class... Args>
void test(T first, Args... args)
{
cout << typeid(T).name() << " " << first <<endl;
test(args...);
}
//
int 1
int 2
test()3
これです。一番目のtestでどこで終わりますか?最後に正しいアキュムレータを書きます。
#include <iostream>
#include <stdarg.h>
using namespace std;
template<typename T>
int add(const T& t)
{
return t;
}
template<typename T, typename ...Args>
int add(const T& t, const Args&... args)
{
return t + add(args...);
}
int main() {
auto res = add(2, 3, 3);
std::cout << res << std::endl;
system("pause");
return 0;
}
// 8
三、参考可変パラメータタイプのテンプレート、右値の参照と完璧な転送については、このブログhttps://www.jb51.net/article/95152.htmを参照してください。時間があれば、後でどうすればいいですか?
ここでC/C++可変パラメータ関数の実現に関する記事を紹介します。これに関連して、C/C++可変パラメータ関数の詳細を紹介します。以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。