如何让构造函数在 C++ 中接受无限参数?

问题描述 投票:0回答:2

出于教育目的,我正在重新实施

std::list

我在想有没有办法让用户使用这个语法来初始化:

my::list l = {1, 2, 3, 4, 5};
c++ list class overloading instance
2个回答
4
投票

这就是初始化列表的用途。 例如,你可以有一个这样的构造函数:

class list {
public:
    list(std::initializer_list<int> l) {
        for (int x : l) {
            // do something with x
        }
    }
};

或者通过使用模板使其更通用:

template<typename T>
class list {
public:
    list(std::initializer_list<T> l) {
        for (const auto &x : l) {
            // do something with x
        }
    }
};

0
投票

这是我使用可变参数模板的解决方案:

template<typename T>
class my::list {
public:
    template<typename... Args>
    list(Args... args) { init(args...); }
    void push_back(T);
private:
    template<typename... Args>
    void init(T value, Args... args) {
        push_back(value);
        init(args...);
    }
};

init
函数递归调用自身,并检查第一个值是否为
T
类型,然后将其压入列表中。

© www.soinside.com 2019 - 2024. All rights reserved.