簡體   English   中英

C ++在分配類變量時使用大括號

[英]C++ Using curly brackets in assignment of class variable

當我在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, 2, 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, 2, 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 ++中沒有operator{}

如果您可以使用現代C ++(例如C ++ 11),則可以使用std :: initializer_list 大多數現代編譯器都支持它,只需添加-std=c++11編譯標志

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM