其他分享
首页 > 其他分享> > c-如何制作模板参数

c-如何制作模板参数

作者:互联网

如何创建带有任何类型的函数指针的元函数?在下面的代码中,如何摆脱“ decltype(& f)”?

template <class FuncType, FuncType functionPointer>
void runFunc()
{
    functionPointer();
}

runFunc<decltype(&f),f>();

我不想单独指定f的类型;信息已经在f中了.我不希望通过定义来解决这个问题.
这基本上是应用于元编程的模板化函数类型惯用语.我不想知道f的类型,但是我得到的任何东西显然都允许我在其上调用operator().

我尝试过的东西:

模板参数的顺序不同;因为后面的参数在您有功能时似乎是可以猜测的;这是不可能的,因为那样您就需要转发声明FuncType才能将其作为functionPointer的类型

进行切换,以便您指定returntype和参数并提供该类型的函数指针;无法实例化中间带有可变模板参数的模板;如下所示:

template <class ReturnType, class ... ArgTypes, ReturnType (*functionPointer)(ArgTypes...)>
void runFunc()
{
    functionPointer();
}

runFunc<void, int, f>(); // error; invalid template argument for 'ArgTypes', type expected

github上还有更多上下文:https://github.com/TamaHobbit/FuncTest/blob/master/FuncTest/FuncTest.cpp

解决方法:

不幸的是,目前没有好的方法.

但是,标准委员会已经接受了制定此有效代码的提案:

template <auto functionPointer>
void runFunc() {
  functionPointer();
}

编译器支持应该很快就会出现.

标签:c,templates,metaprogramming,function-pointers
来源: https://codeday.me/bug/20191013/1908956.html