当我在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(); }
另一种方法是使用可变参数模板构造函数(我发现它不太可读,但它具有使代码通用的优点:您可以将任意元素传递给构造函数):
#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...); } };
注意:
C中没有运算符{}.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。