我想知道是否可以编写类似于此声明的任何内容(使用参数包)。
decltype(auto) (*funcPtr)(...);
如果可能的话,我还想知道声明这样一个指针的替代方法。
我想知道是否可以编写类似于此声明的任何内容(使用参数包)。
decltype(auto) (*funcPtr)(...);
如果可能的话,我还想知道声明这样一个指针的替代方法。
C++ 是一种静态类型语言。所有函数参数类型和返回类型必须在编译时已知。您不能声明返回任意类型的函数(好吧,我想您可以return std::any
,但我想不出您想要的情况)。
但是,您可以使用模板来创建函数模板,其中编译器将为您删除多个版本的函数,因此您不必自己编写它们。
请记住,auto
这decltype(auto)
不是魔术。如果它们不存在,它们只是您自己编写的语法糖。它们不启用该语言中尚不存在的任何新功能。它们只是使这些功能更易于使用。
不,没有类型,例如指向“返回任何东西”的函数的指针。只有指向返回某种类型或的函数的指针void
。auto
只是从初始化程序中推断出类型,在您的示例中没有任何东西可以推断出类型。
但是,您可以拥有一个函数模板,其中模板的实例是一个返回由模板参数指定的类型的函数:
// function template
template<class T>
T foo() {
return {};
}
同样,您可以拥有一个变量模板,它是指向函数的指针,其返回类型由模板变量指定:
// variable template
template<class T>
T (*funcPtr)() = foo;
// example usage
int main() {
return funcPtr<int>();
}