C在赋值类变量时使用大括号
发布时间:2020-12-16 10:35:20 所属栏目:百科 来源:网络整理
导读:当我在C中声明一个数组时,我可以使用这样的大括号: int var[3] = {1,2,3}; 我可以在类中使用大括号声明,比如运算符重载吗? 我的意思是,像这样: class example{private: int m_sum;public: void operator{}(int a,int b,int c) { m_sum = a+b+c; } int get
当我在C中声明一个数组时,我可以使用这样的大括号:
int var[3] = {1,2,3}; 我可以在类中使用大括号声明,比如运算符重载吗? class example { private: int m_sum; public: void operator{}(int a,int b,int c) { m_sum = a+b+c; } int get_sum() { return m_sum; } } int main() { example ex = {1,3}; std::cout << ex.get_sum() << endl; // prints 6 return 0; } 上面的代码只是我的想象,但我想使用大括号作为此代码. 解决方法
您可能希望构造函数采用
std::initializer_list :
#include <iostream> #include <algorithm> #include <initializer_list> class example { private: int m_sum; public: example(std::initializer_list<int> parameters) { m_sum = std::accumulate(std::begin(parameters),std::end(parameters),0); } int get_sum() const { return m_sum; } }; int main() { example e = { 1,3,4 }; std::cout << e.get_sum(); } Live Demo 另一种方法是使用可变参数模板构造函数(我发现它不太可读,但它具有使代码通用的优点:您可以将任意元素传递给构造函数): #include <iostream> #include <algorithm> #include <initializer_list> class example { private: int m_sum; public: template <class... Ts> example(Ts&&... vs) : m_sum(compute_sum(vs...)) { } int get_sum() const { return m_sum; } private: template<typename Ts1> Ts1 compute_sum(const Ts1& val) { return val; } // termination template<typename Ts1,typename... Ts> Ts1 compute_sum(const Ts1& arg1,const Ts&... args) { return arg1 + compute_sum(args...); } }; Live Demo 注意: C中没有运算符{}. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |