@@ -147,6 +147,20 @@ void serializeFunc2DVector(FILE *file, size_t chunksize,
147147 fprintf (file, " %*s</%s>\n " , indent, " " , tagName);
148148}
149149
150+ // Overloaded dispatch helpers for readFunc2DVector (C++11-compatible
151+ // alternative to if constexpr)
152+ inline void readFuncStep (FILE *file, size_t chunksize, const char *line,
153+ std::vector<flagcxC2cHomoFunc> &step) {
154+ if (strstr (line, " <HomoFunc>" ))
155+ step.emplace_back (file, chunksize);
156+ }
157+
158+ inline void readFuncStep (FILE *file, size_t chunksize, const char *line,
159+ std::vector<flagcxC2cHeteroFunc> &step) {
160+ if (strstr (line, " <HeteroFunc>" ))
161+ step.emplace_back (file, chunksize);
162+ }
163+
150164template <typename T>
151165std::vector<std::vector<T>> readFunc2DVector (FILE *file, size_t chunksize,
152166 const char *tagName) {
@@ -169,13 +183,7 @@ std::vector<std::vector<T>> readFunc2DVector(FILE *file, size_t chunksize,
169183 while (fgets (line, sizeof (line), file)) {
170184 if (strstr (line, " </Step>" ))
171185 break ;
172- if (std::is_same<T, flagcxC2cHomoFunc>::value) {
173- if (strstr (line, " <HomoFunc>" ))
174- step.emplace_back (file, chunksize);
175- } else if (std::is_same<T, flagcxC2cHeteroFunc>::value) {
176- if (strstr (line, " <HeteroFunc>" ))
177- step.emplace_back (file, chunksize);
178- }
186+ readFuncStep (file, chunksize, line, step);
179187 }
180188 result.push_back (step);
181189 }
0 commit comments