gpt4 book ai didi

c++ - 使用函数指针类型作为模板参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:09 25 4
gpt4 key购买 nike

我正在尝试编写一个模板,它将函数指针的类型作为 templateargument 并将相应的函数指针作为函数参数,因此作为一个简单的示例,我现在正在这样做:

int myfunc(int a)
{ return a; }

template<typename T, typename Func> struct Test
{
typedef typeof(myfunc) Fun;
static T MyFunc(T val, Func f)
{
return f(val);
}
};

int main(void)
{
std::cout<<Test<int, typeof(myfunc)>::MyFunc(5, myfunc)<<std::endl;
}

但是这段代码立即崩溃了。如果我将 f 的类型更改为 Fun,它会完美运行。那么我做错了什么,我怎样才能让它发挥作用?

如果该行为依赖于编译器,我将在 Windows Vista 下使用 mingw。

最佳答案

对于这种情况,您实际上并不需要 Test 类,为什么要在这里使用 typeof 函数?

template< typename T, typename fT > 
T TestMyFunc( T t, fT f ) {
return f(t);
};

会做,并且不会摆弄函数指针类型:

std::cout << TestMyFunc(5,myfunc) << std::endl;

函数的模板参数是自动推导的!

关于c++ - 使用函数指针类型作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1934052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com