gpt4 book ai didi

c++ - 在对空基类使用聚合初始化时如何避免 {}

转载 作者:可可西里 更新时间:2023-11-01 18:38:53 28 4
gpt4 key购买 nike

C++17 对基类的聚合初始化非常棒,但当基类仅用于提供一些功能(因此没有数据成员)时,它就显得冗长了。

这是一个最小的例子:

#include <cstddef>
struct base_pod
{
// functions like friend compare operator
};
template<typename T, std::size_t N>
struct der_pod : public base_pod
{
T k[N];
};

int main()
{
der_pod<int, 2> dp {{}, {3, 3} };
}

如上例所示,我必须提供空的 {},否则会出现编译错误。 live demo .如果我省略它:

prog.cc:15:28: error: initializer for aggregate with no elements requires explicit braces
der_pod<int, 2> dp{3, 3};
^
prog.cc:15:31: warning: suggest braces around initialization of subobject [-Wmissing-braces]
der_pod<int, 2> dp{3, 3};
^
{}
1 warning and 1 error generated.

任何解决方法或 C++17 之前的方法?

最佳答案

你仍然可以提供构造函数,例如:

template <typename T, std::size_t N> using always_t = T;

struct base_pod
{
// functions like friend compare operator
};
template<typename T, typename Seq> struct der_pod_impl;

template<typename T, std::size_t ... Is>
struct der_pod_impl<T, std::index_sequence<Is...>> : base_pod
{
der_pod_impl(always_t<T, Is>... args) : k{args...} {}

T k[sizeof...(Is)];
};

template<typename T, std::size_t N>
using der_pod = der_pod_impl<T, std::make_index_sequence<N>>;

Demo

关于c++ - 在对空基类使用聚合初始化时如何避免 {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55592478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com