如何创建一个带有任何函数指针的元函数?在下面的代码中,我如何摆脱" decltype(& f)" ?
template <class FuncType, FuncType functionPointer>
void runFunc()
{
functionPointer();
}
runFunc<decltype(&f),f>();
我不想单独指定f的类型;信息已经存在于f中。我不想诉诸定义来解决这个问题。 这基本上是应用于元编程的模板化函数类型习惯用法;我不想知道f的类型,但无论我得到什么,显然都允许我在上面调用operator()。
我试过的东西:
模板参数的不同顺序;因为当你有一个函数时,后来的参数似乎是可猜测的;不可能因为那时你需要转发声明FuncType,以便将它作为functionPointer的类型
切换它以便指定返回类型和参数并给出该类型的函数指针;无法在中间实例化具有可变模板参数的模板;如下所示:
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
答案 0 :(得分:3)
您可以使用:
template <typename FuncType>
void runFunc(FuncType functionPointer )
{
functionPointer();
}
runFunc(f);
答案 1 :(得分:2)
现在很遗憾没有好办法。
然而,标准委员会已接受提出此有效代码的提案:
template <auto functionPointer>
void runFunc() {
functionPointer();
}
编译器支持应该很快就会到来。