Как это возможно? Я хочу, чтобы включить передачу аргументов во время компиляции. Предположим, что это только для удобства пользователя, так как всегда можно вывести реальный тип с помощью template<class T, T X>
, но для некоторых типов, то есть для функций-указателей, это довольно утомительно, даже с decltype
в качестве ярлыка. Рассмотрим следующий код:
struct Foo{
template<class T, T X>
void bar(){
// do something with X, compile-time passed
}
};
struct Baz{
void bang(){
}
};
int main(){
Foo f;
f.bar<int,5>();
f.bar<decltype(&Baz::bang),&Baz::bang>();
}
Можно ли каким-либо образом преобразовать его в следующее?
struct Foo{
template<auto X>
void bar(){
// do something with X, compile-time passed
}
};
struct Baz{
void bang(){
}
};
int main(){
Foo f;
f.bar<5>();
f.bar<&Baz::bang>();
}