吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1092|回复: 16
收起左侧

[求助] C++问题

[复制链接]
klamauk 发表于 2021-9-4 15:58
50吾爱币
有一个函数模板myprint,我想把它作为参数传递给另一个函数模板fun。要怎么做才可以?
[C++] 纯文本查看 复制代码
template<typename F>
void fun(F f)
{
    f();
}

template<typename T>
void myprint()
{
    std::cout << "myprint" << std::endl;
}

//错误,未找到匹配的重载函数
fun(myprint);


另一个问题是有如下的变参函数。是不是没办法处理传过来的参数?
[Asm] 纯文本查看 复制代码
void myprint(...)
    {
        
    }

最佳答案

查看完整内容

因为泛型不是所有类型都能表示的,给你两种解决方式一种是特化,一种是通过仿函数。 [mw_shl_code=cpp,true]#include using namespace std; typedef void(*Fu)(); //方式1:仿函数 class Myprint { public: void myprint() { std::cout

免费评分

参与人数 3吾爱币 +2 热心值 +2 收起 理由
MaxMadcc + 1 热心回复!
zhangzy228 + 1 + 1 谢谢@Thanks!
wuai1023a + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

亮哥vvv 发表于 2021-9-4 15:58
因为泛型不是所有类型都能表示的,给你两种解决方式一种是特化,一种是通过仿函数。
[C++] 纯文本查看 复制代码
#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;
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
klamauk + 1 + 1 myprint是要接收模板参数的。

查看全部评分

gchq2005 发表于 2021-9-4 17:08
梦爱 发表于 2021-9-4 17:11
std::function<void(void)>   这个定义可以作为参数穿进去
 楼主| klamauk 发表于 2021-9-4 17:20
myprint是一个函数模板,不是普通函数。
 楼主| klamauk 发表于 2021-9-4 17:29
亮哥vvv 发表于 2021-9-4 16:54
因为泛型不是所有类型都能表示的,给你两种解决方式一种是特化,一种是通过仿函数。
[mw_shl_code=cpp,tru ...

仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint<int>);
亮哥vvv 发表于 2021-9-4 17:40
klamauk 发表于 2021-9-4 17:29
仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint);

奥,那泛型就能表示函数指针,那就不用特化了,你直接调吧,那个Myprint 类 我忘了,可以把它定义成模板类也,实现方式和写的代码差不多,调的时候 fun(Myprint()<int>) 给上类型就行了。
亮哥vvv 发表于 2021-9-4 17:52
klamauk 发表于 2021-9-4 17:29
仿函数中myprint不是一个函数模板。
特化那个不用特化也可以这样调用,fun(myprint);

我查了一下,确实特化不是在这用的,泛型可以表示任意类型的,之前说错了。
 楼主| klamauk 发表于 2021-9-4 18:01
亮哥vvv 发表于 2021-9-4 17:52
我查了一下,确实特化不是在这用的,泛型可以表示任意类型的,之前说错了。

答案给你吧。第二个问题会吗?
aonima 发表于 2021-9-4 19:33
c++各种语法太麻烦了,还是c好用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-29 10:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表