类型别名和具有函数数据类型的别名模板

时间:2018-06-22 15:55:46

标签: c++ templates

template<typename R, typename... Types>
using Function = R(*)(Types...);

我在dev.to上看到了这行

这种类型的别名声明R(*)(Types...)在我看来很奇怪,因为没有函数名指针。

这是什么,如何实现此模板?

2 个答案:

答案 0 :(得分:3)

  

这种类型的别名声明R(*)(Types...)在我看来很奇怪,因为没有函数名指针。

没有名称,因为它应该是一种类型。举一个简单的例子:

using IPtr = int*;

RHS只是一种类型。使用

using IPtr = int* x;
  

这是什么,如何实现此模板?

它允许使用简单直观的语法声明和定义函数指针。

您可以使用

int foo(double) { ... }
int bar(double) { ... }

Function<int, double> ptr = &foo;

// Use ptr

// Change where ptr points to

ptr = &bar;

// Use ptr more

答案 1 :(得分:2)

我发现在https://en.cppreference.com/w/cpp/language/type_alias

上使用了示例
// type alias, identical to
// typedef void (*func)(int, int);
using func = void (*) (int, int);
// the name 'func' now denotes a pointer to function:
void example(int, int) {}
func f = example;

这行是针对实际问题的实现;

template<typename R, typename... Types>
using Function = R(*)(Types...);
bool example(int&a){
    cout<< a;
    return false;
}
int main()
{
    int a  = 8;
    Function<bool, int&> eFnc =  example; 
    eFnc(a);
    return 0;
}