首页 > 解决方案 > 对象参数内的对象初始化(构造函数)

问题描述

您好,我尝试传递相同类型的类构造函数的对象,并且我喜欢将其保存为类中的元组。

所以我有这个代码:

class endpoint_keys_impl {
public:
    endpoint_keys_impl() = default;

    template<typename ...PO>
    explicit endpoint_keys_impl(PO... properties) : keys(std::tuple(properties)...) {}
    
private:
    std::tuple<PropertyObject> keys;
};

它从 PropertyObject 类型的构造函数参数构造一个元组。

属性对象 == 属性

所以我可以用:

endpoint_keys_impl test { property("prop1"), property("prop2") };

它工作正常,我使用了两个这样的子类:

struct websocket_endpoint_keys : public endpoint_keys_impl {
    websocket_endpoint_keys() = default;

    template<typename ...PO>
    explicit websocket_endpoint_keys(PO... properties) : endpoint_keys_impl(properties...) {};
};

另一个用于rest_endpoint_keys。

我在名为 data_endpoint 的类中使用了展位类:

template <typename T>
class data_endpoint {
public:
    data_endpoint(std::string  path, rest_endpoint_keys rest_keys, websocket_endpoint_keys websocket_keys)
    : _internal_rest_keys(std::move(rest_keys)),
      _internal_websocket_keys(std::move(websocket_keys)),
      path(std::move(path)) {};
};

现在,当我尝试使用更多作为一个属性来初始化这些类时,我得到一个错误,为什么?

data_endpoint<sometype> endpoint
        {"symbols",
            rest_endpoint_keys {
                property("prop1"),
                property("prop2")
            },

            websocket_endpoint_keys {
                property("prop1"),
                property("prop2")
            }
        };

编辑:

我认为问题在于 endpoint_keys_impl 中的元组只有一种类型。但是当我有更多项目时,元组应该有 std::tuple<PropertyObject, PropertyObject>。

有没有一种方法可以在该类中生成 std​​::tuple 而无需参数化所有直到 data_endpoint 类?(类型是已知的,但我需要它的计数和元组的生成)

标签: c++

解决方案


推荐阅读