tag分派將有助於識別正確的函數:
struct from_vecs {};
parallelogram(tiny_vec<float, 3> p1, tiny_vec<float, 3> p2, tiny_vec<float, 3> p3);
parallelogram(from_vecs, tiny_vec<float, 3> p1, tiny_vec<float, 3> height_vec, tiny_vec<float, 3> width_vec);
甚至:
struct from_points {};
struct from_vecs {};
parallelogram(from_points, tiny_vec<float, 3> p1, tiny_vec<float, 3> p2, tiny_vec<float, 3> p3);
parallelogram(from_vecs, tiny_vec<float, 3> p1, tiny_vec<float, 3> height_vec, tiny_vec<float, 3> width_vec);
否則,使用模板功能:
enum class Tag { Points, Vecs };
template<Tag>
parallelogram(tiny_vec<float, 3>, tiny_vec<float, 3>, tiny_vec<float, 3>);
因此完全專注它:
template<>
parallelogram<Points>(tiny_vec<float, 3>, tiny_vec<float, 3>, tiny_vec<float, 3>) { }
template<>
parallelogram<Vecs>(tiny_vec<float, 3>, tiny_vec<float, 3>, tiny_vec<float, 3>) { }
以後,您可以調用它爲:
parallelogram<Vecs>(/* ... params ...*/);
typedef不同的tiny_vecs – pm100