[英]How to make an array's derived type accept aggregate initialization?
例如
class A : public std::array<int, 3>
{
};
和
A a{1, 2, 3}; // failed currently.
如何使數組的派生類型接受聚合初始化?
您可以提供如下的可變參數模板構造函數:
class A : public std::array<int, 3> {
public:
template<typename... Args> constexpr A(Args&& ...args)
: std::array<int, 3>{{std::forward<Args>(args)...}} {}
};
編輯:
以下版本也適用於Visual Studio:
class A : public std::array<int, 3> {
public:
template<typename... Args> constexpr A(Args&& ...args)
: std::array<int, 3>(std::array<int,3>{std::forward<Args>(args)...}) {}
};
編輯:正如其他人在評論中指出的那樣,這對std::array
不起作用,因為std::array
不包含構造函數采用initializer_list
。 但是對於具有構造函數的initializer_list
其他容器,它可能很有用,例如std::vector
。
您可以使用繼承構造函數 (從C ++ 11開始):
class A: public std::vector<int,3>
{
using std::vector<int,3>::vector;
};
只需定義一個這樣的構造函數:
A(std::array<int, 3>);
例:
#include <array>
#include <iostream>
struct A : public std::array<int, 3>
{
A(std::array<int, 3> a) :
std::array<int, 3>{a}
{
}
};
int main(void)
{
A a({1, 2, 3});
std::cout << a[0] << "\n";
std::cout << a[1] << "\n";
std::cout << a[2] << "\n";
}
這不是聚合初始化,但它是“好像”......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.