您好,登錄后才能下訂單哦!
本篇內容主要講解“如何使用c中變長參數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用c中變長參數”吧!
1.使用模板中的變長參數函數聲明
#include <iostream> using namespace std; /*變長參數函數模板聲明*/ template <typename... T> void print(T... val); /*邊界條件*/ void print(void) { cout<<"here end"<<endl; } /*遞歸的特例化定義*/ template <typename T1, typename... T2> void print(T1 start, T2... var) { cout<<"sizeof ... now is: "<<sizeof... (var)<<endl; cout<<start<<endl; print(var...); } int main(void) { print(1,2,3,4); return 0; }其中的聲明其實是沒什么用的,只是告訴使用者可以按照這樣的格式使用,如果不做這個聲明,只保留"邊界條件"和"遞歸的特例化定義",這樣雖然可行,但是未免會造成困惑
執行結果如下:
實際上,這個"變長"付出的代價還是很大的,要遞歸的實例出n個函數,最終再調用邊界條件的函數。過程如下
2.使用va_list()函數實現變長參數列表
以一個矩陣自動識別維度的程序為例
arrayMat.h
#include<iostream> #include<string> #include<stdarg.h> using namespace std; typedef int dtype; class mat { public: mat(); ~mat(); void set_dim(int dim); void mat::set_mat_shape(int i,...); int get_dim(); int* get_mat_shape(); void print_shape(); dtype* make_mat(); private: int dim; int *shape; dtype *enterMat; };arrayMat.cpp
#include"arrayMat.h" mat::mat() { } mat::~mat() { } int mat::get_dim() { return this->dim; } int * mat::get_mat_shape() { return this->shape; } void mat::print_shape() { for (int a = 0; a < this->dim; a++) { std::cout << shape[a] << " " ; } } void mat::set_dim(int i) { this->dim = i; } void mat::set_mat_shape(int i, ...) { va_list _var_list; va_start(_var_list, i); int count = 0; int *temp=new int[100]; while (i != -1) { //cout << i <<" "; temp[count] = i; count++; i = va_arg(_var_list, int); } va_end(_var_list); this->set_dim(count); this->shape = temp; //std::cout << std::endl; //this->shape = new int [count]; //for (int j = 0; j < count; j++) //shape[j] = temp[j]; } //Mat2D A[i][j] = B[i + j * rows]main.cpp
#include"arrayMat.h" int main() { mat m1,m2; m1.set_mat_shape(1,3,128,128,-1); int *shape = m1.get_mat_shape(); int dim = m1.get_dim(); cout << "dim: " << dim<<endl; for (int i = 0; i < dim; i++) cout <<*(shape+i) <<" "; m1.print_shape(); //m1.make_mat(); //m2.set_mat_shape(3,3); //m2.make_mat(); //m2.print_mat(); return 0; }運行結果:
到此,相信大家對“如何使用c中變長參數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。