在我重载函数时,函数指针是否有效?

时间:2015-06-09 13:45:34

标签: c++ function-pointers overloading

我只是练习函数指针。

#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);
}

但是此代码无效。它说未解决的打印地址。有什么方法可以实现这两种功能吗?我的意思是函数指针和重载。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用标准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);
}