我有一段代码,在下面复制,有一些非常相似的结构,其中只有一个成员改变了类型。我希望简化它。我正在考虑使用模板,但我不太确定结构和模板之间的语法是什么。任何指针都将非常感激。
typedef struct pos_parameter{
float magnitud;
bool new_value;
} pos_parameter;
typedef struct feed_parameter{
double magnitud;
bool new_value;
} feed_parameter;
typedef struct speed_parameter{
long magnitud;
bool new_value;
} speed_parameter;
typedef struct g_code_parameter{
int magnitud;
bool new_value;
} g_code_parameter;
typedef struct position{
pos_parameter X;
pos_parameter Y;
pos_parameter Z;
pos_parameter A;
} position;
typedef struct move{
position pos;
feed_parameter feedrate;
speed_parameter speed;
g_code_parameter g_code;
} move;
答案 0 :(得分:3)
template <typename T>
struct parameter{
T magnitud;
bool new_value;
};
使用示例:
parameter<float> pos_parameter;
parameter<double> feed_parameter;
parameter<long> speed_parameter;
parameter<int> code_parameter;
希望有所帮助。
答案 1 :(得分:2)
我猜前四个可能是:
template<typename T>
struct pos_parameter{
T magnitud;
bool new_value;
};
答案 2 :(得分:2)
在我们开始对magnitud
成员变量进行泛化之前,请快速观察一下。您不需要使用typedef struct {/*...*/} name;
语法,而且在C ++中非常非惯用语法。在C中,这可能是必需的,但C ++不是C.在C ++中,您可以简单地:
struct Gizmo
{
/* ... */
};
现在,为了对magnitud
成员变量的类型进行泛化,您可以创建一个类模板:
template<class MAG> struct basic_parameter
{
MAG magnitud;
bool new_value;
};
你会声明这样的事实:
basic_parameter<int> myparam;
您还可以使用typedef
为basic_parameter
的certian专精创建一种“别名”,如下所示:
typedef basic_param<int> int_param; // Now int_param is shorthand for basic_param<int>
/* ... */
int_param myparam; // myparam is of type basic_param<int>
您可以使用此技术为typedef
和position
结构中使用的所有不同类型的参数创建move
,并使其不会必须更改这些类型的代码。
这是一个完整的解决方案:
template<class MAG> struct basic_parameter
{
MAG magnitud;
bool new_value;
};
typedef basic_parameter<float> pos_parameter;
typedef basic_parameter<double> feed_parameter;
typedef basic_parameter<long> speed_parameter;
typedef basic_parameter<int> g_code_parameter;
struct position {
pos_parameter X;
pos_parameter Y;
pos_parameter Z;
pos_parameter A;
};
struct move
{
position pos;
feed_parameter feedrate;
speed_parameter speed;
g_code_parameter g_code;
};
int main()
{
}
答案 3 :(得分:1)
template<typename T>
struct generic_parameter
{
T magnitud;
bool new_value;
};
你去了