gpt4 book ai didi

c++ - 如何通过模板重载明确引用函数

转载 作者:可可西里 更新时间:2023-11-01 16:22:37 25 4
gpt4 key购买 nike

假设我有以下定义:

int f(int ) { return 1; } // a)

template<typename T> int f(T x) { return 2; } // b)

我知道如果我调用 f ,例如f(1) ,非模板重载 a) 将是首选,但有没有办法明确地引用 a)?例如,我可以使用 f<int>明确指代 b)。

作为这为何有用的示例,请考虑以下函数:

template<typename Func, typename T> void print_result(Func f, T arg) 
{
std::cout << f(arg) << std::endl;
}

如果我尝试在 f 上使用它,例如 print_result(f,1) ,我得到一个编译错误(编译器不知道我指的是哪个 f)。我可以使用 print_result(f<int>,1)告诉它使用 b),但我如何告诉它使用 a)?

我发现我可以使用 print_result(static_cast<int (*)(int)>(f), 1) ,但这感觉很笨拙而且很麻烦。有没有更好的办法?

最佳答案

使用模板特化:

template<>
int f<int>(int x ) { return 1; } // a)

关于c++ - 如何通过模板重载明确引用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635198/

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