加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中没有运算符{}.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读