C++ 限制变量函数中的参数个数

C++ 限制变量函数中的参数个数,c++,variadic,C++,Variadic,因此,我一直在处理一个函数类,默认情况下,我可以这样做,它可以工作: int main(){ function f("x^2+1"); cout<<f(3)<<endl; return 0; } intmain(){ 函数f(“x^2+1”); cout您可以通过使用静态断言来限制可变参数的数量 template <typename ... Args> void operator()(Args&&... args) { s

因此,我一直在处理一个函数类,默认情况下,我可以这样做,它可以工作:

int main(){
    function f("x^2+1");
    cout<<f(3)<<endl;

return 0;
}
intmain(){
函数f(“x^2+1”);

cout您可以通过使用
静态断言来限制可变参数的数量

template <typename ... Args>
void operator()(Args&&... args)
{
 static_assert(sizeof...(Args) <= 2, "Can deal with at most 2 arguments!");
}
模板
使用double_t=double;
模板
使用nfun=std::function;
模板
nfun func(常量字符*,C…C);
它将返回一个n元
std::function
,该n元等于
func
的“变量”参数数


因此
func(“x^2+y”,“x”,“y”,“z”)将返回
std::function
作为示例。

我的建议是从一个更简单的变量模板用例开始,了解它们的正常使用方式。为了解决这个特殊问题,您需要解决函数表示中参数的部分应用(因为变量模板是递归的),这并不是很简单。我要提醒大家不要为此使用普通的C变量函数,因为它们不是严格安全的(请参阅printf漏洞)我很可能会使用第一个参数,但它到底是如何工作的?如果我传入三个参数,这会返回编译错误吗?否则,我可以将sizeof…(Args)与传入构造函数的大小进行比较。另外,使用可变模板是否有特定的原因?使用(Args Args&&…)如何?我将输入的所有变量都将被视为双精度变量,因此模板有意义吗?您可能是指
decltype(void(std::declval()),0.)…
@piotrs。或者干脆完全取消decltype。
template <typename ... Args>
void operator()(Args&&... args)
{
 static_assert(sizeof...(Args) <= 2, "Can deal with at most 2 arguments!");
}
template <typename ... Args>
auto operator()(Args&&... args) -> std::enable_if_t<sizeof...(Args) <= 2>
{
}
template<class T>
using double_t=double;
template<class...Ts>
using nfun=std::function<double(double_t<Ts>...)>;

template<class...C>
nfun<C...> func(const char*,C...c);