У меня есть шаблон класса Foo, который имеет несколько членов, один из которых является функциональной панелью типа Bar:
template<std::size_t N>
class Foo
{
...
Bar<N> bar;
...
};
Я бы хотел, чтобы Bar<2>
был псевдонимом шаблона для функции double (* )(double, double)
(или возможно std::function<double(double, double)>
).Точно так же я хочу, чтобы Bar<3>
был псевдонимом шаблона для функции double (* )(double, double, double)
(или, возможно, std::function<double(double, double, double)>
).Это означает, что N
должно указывать количество двойных аргументов, которые принимает функциональная панель.
Единственный способ, которым мне удалось приблизиться к этому поведению, - использовать псевдоним шаблона
template <std::size_t N>
using Bar = double (* )(std::array<double, N>& eval);
Таким образом, однако, я не могу вызвать функцию bar
естественным образом bar(x,y,z)
.
Возможно ли получить поведение, которое я хочу?