gpt4 book ai didi

c++ - 推导函数调用时的歧义问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:25 24 4
gpt4 key购买 nike

我有以下代码,它有两个版本的函数 foo。我希望是否为采用 AVar 类型的 foo 传递了一个变量,否则如果为要调用的 AConst 版本传递了一个 const。

#include <iostream>

template <typename T>
struct AConst
{
AConst(T x):t(x){}
const T t;
};

template <typename T>
struct AVar
{
AVar(const T& x):t(x){}
const T& t;
};

template <typename T>
void foo(AConst<T> a) { std::cout << "foo AConst\n"; }

template <typename T>
void foo(AVar<T> a) { std::cout << "foo AVar\n"; }

int main()
{
int i = 2;

foo(1);
foo(i);

return 0;
}

目前编译器给我一个歧义错误。不确定如何解决。

更新:根据 Leonid 的回答稍作修改,以下是按要求工作的解决方案:

template <typename T>
void foo_x(AConst<T> a) { std::cout << "foo AConst\n"; }

template <typename T>
void foo_x(AVar<T> a) { std::cout << "foo AVar\n"; }


template <typename T>
void foo(const T& a) { foo_x(AConst<T>(a));}

template <typename T>
void foo(T& a) { foo_x(AVar<T>(a));}

最佳答案

编译器无法推断出你的 T。
为了帮助他,简化参数类型:

template <typename T> 
void foo(const T& a) { AConst<T> aa(a); std::cout << "foo AConst\n"; }

template <typename T>
void foo(T& a) { AVar<T> aa(a); std::cout << "foo AVar\n"; }

关于c++ - 推导函数调用时的歧义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20139401/

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