将 std::array 衰减为指针

Nic*_*ick 1 c++ c++17

我有这样的课程:

struct S{
    void method1(int *a){
       // use a
    }

    void method2(int *a){
       // use a
    }
};
Run Code Online (Sandbox Code Playgroud)

为了避免分配,我正在执行以下操作:

std::array<int, 100> a;
S s;
s.method1(a.data());
Run Code Online (Sandbox Code Playgroud)

然而,如果我能够做到,而不需要制作所有方法模板,那就更好了。

std::array<int, 100> a;
S s;
s.method1(a);
Run Code Online (Sandbox Code Playgroud)

在 C++20 中我可以使用std::span,但目前我也想避免它。

有什么简单的方法来定义一些能够转换/转换的运算符,但只能在类内部?

Qui*_*mby 5

您可以使用非成员std::data并将其称为s.method1(std::data(a));

这适用于原始数组、std::arraystd::span其他数组。