now*_*wox 5 c++ templates c++03
我有一个向量类:
template <typename T>
class Vector2 {
public:
T x, y;
Vector2(T x, T, y) : x{x}, y{y} {}
}
Run Code Online (Sandbox Code Playgroud)
我想根据上下文获得不同的访问器:
Vector2<float, x, y> xy;
xy.x = 42;
Vector2<float, u, v> uv;
uv.u = 42;
Run Code Online (Sandbox Code Playgroud)
在 C++ 中可能有类似的事情吗?更具体地说,这在 C++03 中可能吗?
我使用 C++ 开发用于 DC/DC 电压转换器的嵌入式固件。我有不同的值,例如电压、电流...可以将一些变换从三相电流(u,v,w)应用到两相静态(a,b)和两相旋转坐标系(d,q) )。使用特定类型会更具可读性,例如:
using CurrentDQ = Vector2<float, d, q>
using CurrentAB = Vector2<float, a, b>
using Current3 = Vector<float, u, v, w>
Run Code Online (Sandbox Code Playgroud)
您可以做的最接近的是:
template <typename T>
struct ElemsUV {T u, v;};
template <typename T>
struct Vector : T {};
Vector<ElemsUV<float>> vec;
// Or:
// template <typename T, template <typename> class E> struct Vector : E<T> {};
// Vector<float, ElemsUV> vec;
Run Code Online (Sandbox Code Playgroud)
你当然可以拆分u成v单独的结构,但对我来说,一个大的看起来更方便。
然后这些Elems??结构将有一个统一的接口用于Vector<...>交互,例如:
template <typename T>
struct ElemsUV
{
T u, v;
T &get_x() {return u;}
T &get_y() {return v;}
};
Run Code Online (Sandbox Code Playgroud)
并且Vector在内部仅使用get_x(),get_y()来访问该元素。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |