Я разработал этот метод, находя способ красиво абстрагировать связывание структуры с оператором SQL для оболочки SQLite, моя цель - уметь абстрагировать большую часть процесса связывания, а также иметь возможность "псевдонима" «шаблон специализированной функции, так что вам не нужно перепечатывать привязки при каждом использовании.
Метод, который я нашел, скомпилируется на clang, но в настоящее время я не могу заставить его работать как для G CC, так и для MSV C из-за использования ключевого слова auto
это реплицируется в приведенном ниже примере с add_2
.
Пример:
// final function to perform the addition on each member
template<class T, class M>
void add2_member(T& value, M member)
{
value.*member += 2;
}
// variadic template function that unpack the Members and calls add2_member for each
// arg in args using c++17 fold syntax.
template<class T, auto T::*... Members>
void add2(T& value)
{
(add2_member(value, Members), ...);
}
// example struct X
struct X
{
int a;
int b;
char c;
};
// alias add2 function specialisation
auto add2_x = add2<X, &X::a, &X::c>;
int main()
{
X x;
x.a = 2;
x.c = 1;
add2_x(x);
}
Прямая ссылка, показывающая эту работу, здесь , который показывает пример компиляции Godolt с помощью Clang 9, но G CC не может определить тип авто, и в настоящее время я не нашел способа достичь своей цели без него, меньше это можно было бы сделать используя макросы.