0

我想知道是否可以编写类似于此声明的任何内容(使用参数包)。

decltype(auto) (*funcPtr)(...);

如果可能的话,我还想知道声明这样一个指针的替代方法。

4

2 回答 2

1

C++ 是一种静态类型语言。所有函数参数类型和返回类型必须在编译时已知。您不能声明返回任意类型的函数(好吧,我想您可以return std::any,但我想不出您想要的情况)。

但是,您可以使用模板来创建函数模板,其中编译器将为您删除多个版本的函数,因此您不必自己编写它们。

请记住,autodecltype(auto)不是魔术。如果它们不存在,它们只是您自己编写的语法糖。它们启用该语言中尚不存在的任何新功能。它们只是使这些功能更易于使用。

于 2020-02-01T15:13:38.413 回答
0

不,没有类型,例如指向“返回任何东西”的函数的指针。只有指向返回某种类型或的函数的指针voidauto只是从初始化程序中推断出类型,在您的示例中没有任何东西可以推断出类型。

但是,您可以拥有一个函数模板,其中模板的实例是一个返回由模板参数指定的类型的函数:

// function template
template<class T>
T foo() {
    return {};
}

同样,您可以拥有一个变量模板,它是指向函数的指针,其返回类型由模板变量指定:

// variable template
template<class T>
T (*funcPtr)() = foo;

// example usage
int main() {
    return funcPtr<int>();
}
于 2020-02-01T17:45:55.940 回答