C++ 泛型函数可以用于结构求和吗?

C++ 泛型函数可以用于结构求和吗?,c++,generics,generic-programming,C++,Generics,Generic Programming,假设我有一个结构,例如: struct Foo { double a; float b; int c; }; 将fooA和fooB(类型均为Foo)相加等于: {fooA.a + fooB.a, fooA.b + fooB.b, fooA.c + fooB.c}; 现在我的问题是,是否可以创建一个通用函数,以这种方式将结构求和在一起?i、 e: template <typename StructType> StructType sumStructs

假设我有一个结构,例如:

struct Foo {
    double a;
    float b;
    int c;
};
fooA
fooB
(类型均为
Foo
)相加等于:

{fooA.a + fooB.a, 
 fooA.b + fooB.b, 
 fooA.c + fooB.c};
现在我的问题是,是否可以创建一个通用函数,以这种方式将结构求和在一起?i、 e:

template <typename StructType>
StructType sumStructs(StructType A, StructType B) {
    // sum component with one another, return resulting struct
}
模板
结构类型sumStructs(结构类型A、结构类型B){
//将组件相互求和,返回结果结构
}

或者,您需要施加哪些限制才能使其成为可能?

是的,您当然可以。您还可以重载+运算符,并免费获得此类泛型。C++中有很多类似这样的想法。代码>更少或
开始
结束
自由功能

正如约阿希姆·皮勒伯格所说

<>不,C++没有,所以没有办法得到结构 未知结构的成员


因此,我最后做的是分别为每个结构重载
+
。这反过来又允许我创建一个泛型函数,它取一个节点,并将它的所有父结构(例如,求和的位置求和,得到一个对象的绝对位置)。

不,C++没有,所以没有办法得到未知结构的结构成员。我想你不需要反省,这里需要编译时反射。这可以通过各种手段实现,但不能用“香草”C++来实现。(类似于带代码生成的多阶段构建)。在确切的结构类型未知的情况下,OP如何获取模板函数/方法中结构的所有字段?您可以键入一组结构,或者提供适配器模板类,或者重载操作符。Less是模板适配器的一个示例。例如,duck type每个可能的字段类型的每个可能的集合?通常适配器用于不一致的类型。与less类似。如果你有一个