C++问题
有一个函数模板myprint,我想把它作为参数传递给另一个函数模板fun。要怎么做才可以?template<typename F>
void fun(F f)
{
f();
}
template<typename T>
void myprint()
{
std::cout << "myprint" << std::endl;
}
//错误,未找到匹配的重载函数
fun(myprint);
另一个问题是有如下的变参函数。是不是没办法处理传过来的参数?
void myprint(...)
{
} 因为泛型不是所有类型都能表示的,给你两种解决方式一种是特化,一种是通过仿函数。
#include <iostream>
using namespace std;
typedef void(*Fu)();
//方式1:仿函数
class Myprint
{
public:
void myprint()
{
std::cout << "myprint" << std::endl;
}
};
template<typename F>
void fun(F f)
{
f.myprint();
}
//方式2:特化
template<>
void fun<Fu>(Fu f)
{
f();
}
template<typename T>
void myprint()
{
std::cout << "myprint" << std::endl;
}
int main()
{
fun(myprint<int>);
fun(Myprint());
system("pause");
return 0;
}
这样算不,,{:301_998:} std::function<void(void)> 这个定义可以作为参数穿进去 myprint是一个函数模板,不是普通函数。 亮哥vvv 发表于 2021-9-4 16:54
因为泛型不是所有类型都能表示的,给你两种解决方式一种是特化,一种是通过仿函数。
仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint<int>); klamauk 发表于 2021-9-4 17:29
仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint);
奥,那泛型就能表示函数指针,那就不用特化了,你直接调吧,那个Myprint 类 我忘了,可以把它定义成模板类也,实现方式和写的代码差不多,调的时候 fun(Myprint()<int>) 给上类型就行了。 klamauk 发表于 2021-9-4 17:29
仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint);
我查了一下,确实特化不是在这用的,泛型可以表示任意类型的,之前说错了。 亮哥vvv 发表于 2021-9-4 17:52
我查了一下,确实特化不是在这用的,泛型可以表示任意类型的,之前说错了。
答案给你吧。第二个问题会吗? c++各种语法太麻烦了,还是c好用
页:
[1]
2