سؤال

Suppose I have a struct, such as:

struct Foo {
    double a;
    float b;
    int c;
};

Summing fooA and fooB (both of type Foo) would equate to:

{fooA.a + fooB.a, 
 fooA.b + fooB.b, 
 fooA.c + fooB.c};

Now my question is, could a generic function be created that would sum structs together in this manner? i.e.:

template <typename StructType>
StructType sumStructs(StructType A, StructType B) {
    // sum component with one another, return resulting struct
}

Alternatively, what limitations would you need to impose for it to be possible?

هل كانت مفيدة؟

المحلول

As Joachim Pileborg put it,

No, C++ doesn't have introspection so there is no way to get structure members of unknown structures.

So what I ended up doing was overloading + for each struct individually. This in turn allowed me to create a generic function that takes a node, and sums all of its parent structs (useful, for example, for summing positions, to get the absolute position of an object).

نصائح أخرى

Yes you certainly can. You can also overload the + operator and would get this type of genericism for free. There are many ideas in c++ that are like this. Less<T> or begin and end free functions.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top