我正在尝试拥有一个可以隐式转换为std::array
. 转换有效,但不是隐含的。
#include <array>
class A {
private:
std::array<float, 7> data;
public:
operator std::array<float, 7>&() { return data; }
operator const std::array<float, 7>&() const { return data; }
};
int main() {
A a;
a[1] = 0.5f; // fails to compile
auto it = a.begin(); // fails to compile
A b;
static_cast<std::array<float, 7>>(b)[1] = 0.5f; //ok
auto it2 = static_cast<std::array<float, 7>>(b).begin(); //ok
return 0;
}
我知道上面的例子很复杂,因为它基本上完全暴露了private
类的成员。但这是一个过于简单的例子,我只是想解决为什么隐式转换std::array
不起作用的问题。
我已经用clang-3.2
和尝试了上面的例子gcc-4.8
。都不编译。
更令人困惑的是,如果我使用隐式转换为指针,编译显然会成功:
operator float *() { return data.begin(); }
operator const float *() const { return data.cbegin(); }
但是,当然,这意味着失去 的许多细节std::array
,如果没有更好的解决方案,我会接受。