C++ 为可变参数重载运算符逗号

编程入门 行业动态 更新时间:2024-10-26 16:32:48
本文介绍了C++ 为可变参数重载运算符逗号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

是否可以通过重载参数的运算符逗号来构造函数的可变参数?我想看一个例子,如何这样做..,也许是这样的:

is it possible to construct variadic arguments for function by overloading operator comma of the argument? i want to see an example how to do so.., maybe something like this:

template <typename T> class ArgList { public: ArgList(const T& a); ArgList<T>& operator,(const T& a,const T& b); } //declaration void myFunction(ArgList<int> list); //in use: myFunction(1,2,3,4); //or maybe: myFunction(ArgList<int>(1),2,3,4);

推荐答案

这是有可能的,但用法看起来不太好.例如:

It is sort-of possible, but the usage won't look very nice. For exxample:

#include <vector> #include <iostream> #include <algorithm> #include <iterator> template <class T> class list_of { std::vector<T> data; public: typedef typename std::vector<T>::const_iterator const_iterator; const_iterator begin() const { return data.begin(); } const_iterator end() const { return data.end(); } list_of& operator, (const T& t) { data.push_back(t); return *this; } }; void print(const list_of<int>& args) { std::copy(args.begin(), args.end(), std::ostream_iterator<int>(std::cout, " ")); } int main() { print( (list_of<int>(), 1, 2, 3, 4, 5) ); }

这个缺点将在 C++0x 中修复,您可以这样做:

This shortcoming will be fixed in C++0x where you can do:

void print(const std::initializer_list<int>& args) { std::copy(args.begin(), args.end(), std::ostream_iterator<int>(std::cout, " ")); } int main() { print( {1, 2, 3, 4, 5} ); }

甚至混合类型:

template <class T> void print(const T& t) { std::cout << t; } template <class Arg1, class ...ArgN> void print(const Arg1& a1, const ArgN& ...an) { std::cout << a1 << ' '; print(an...); } int main() { print( 1, 2.4, 'u', "hello world" ); }

更多推荐

C++ 为可变参数重载运算符逗号

本文发布于:2023-06-03 12:15:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/473719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:逗号   运算符   参数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!