gpt4 book ai didi

templates - 如何区分模板化函数的重载

转载 作者:行者123 更新时间:2023-12-03 06:49:25 25 4
gpt4 key购买 nike

将非模板化函数分配给 function 类型的变量会选择基于签名的正确重载:

// OK
void fn(int val) {}
void fn(int val, int val2) {}

void function(int) foo = &fn;

但是,我似乎无法对模板化函数执行相同的操作:

// template fn!2 matches more than one template declaration
void fn2(T)(T val) {}
void fn2(T)(T val, T val2) {}

void function(int) foo2 = &fn2!int;

如果我可以扩展fn2!int,它似乎相当于第一种情况。

有什么方法可以得到我想要的fn2的重载吗?请注意,这是在模块级别声明的,所以我不能(据我所知)使用__traits(getOverloads)

最佳答案

解决此问题的方法是在同一模板声明中声明两个函数,而不是使用同名模板:

template fn(T)
{
void fn(T a) { }
void fn(T a, T b) { }
}

void main()
{
void function(int) ptr1 = &fn!int;
void function(int, int) ptr2 = &fn!int;
}

关于templates - 如何区分模板化函数的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39164936/

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