当我重载函数时,函数指针是否起作用?
Does function pointers work while I am overloading the functions?
我只是在练习函数指针。
#include <iostream>
#include <functional>
void print(){
std::cout << "Printing VOID...\n";
}
void printI(int a){
std::cout << "Printing INTEGER..."<<a<<"\n";
}
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
p = print;
pi = printI;
p();
pi(10);
}
现在这段代码工作正常,并给我输出..
但我想做的是像下面这样重载打印功能。
#include <iostream>
#include <functional>
void print(){
std::cout << "Printing VOID...\n";
}
void print(int a){
std::cout << "Printing INTEGER..."<<a<<"\n";
}
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
p = print;
pi = print;
p();
pi(10);
}
但是这段代码不起作用。它说未解析的打印地址。有什么办法可以实现这两个功能?我的意思是函数指针和重载。
您可以尝试标准的 static_cast
方法,或者您可以编写一个函数模板助手来为您进行类型一致性:
template <typename Ret, typename... Args>
auto assign_fn (std::function<Ret(Args...)> &f, Ret (*fp) (Args...))
{
f = fp;
}
然后像这样使用:
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
assign_fn(p,print);
assign_fn(pi,print);
p();
pi(10);
}
我只是在练习函数指针。
#include <iostream>
#include <functional>
void print(){
std::cout << "Printing VOID...\n";
}
void printI(int a){
std::cout << "Printing INTEGER..."<<a<<"\n";
}
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
p = print;
pi = printI;
p();
pi(10);
}
现在这段代码工作正常,并给我输出.. 但我想做的是像下面这样重载打印功能。
#include <iostream>
#include <functional>
void print(){
std::cout << "Printing VOID...\n";
}
void print(int a){
std::cout << "Printing INTEGER..."<<a<<"\n";
}
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
p = print;
pi = print;
p();
pi(10);
}
但是这段代码不起作用。它说未解析的打印地址。有什么办法可以实现这两个功能?我的意思是函数指针和重载。
您可以尝试标准的 static_cast
方法,或者您可以编写一个函数模板助手来为您进行类型一致性:
template <typename Ret, typename... Args>
auto assign_fn (std::function<Ret(Args...)> &f, Ret (*fp) (Args...))
{
f = fp;
}
然后像这样使用:
int main(){
std::function<void(void)> p;
std::function<void(int)> pi;
assign_fn(p,print);
assign_fn(pi,print);
p();
pi(10);
}