gpt4 book ai didi

c++ - 具有不同类型的两个参数的隐式模板类型推导

转载 作者:IT老高 更新时间:2023-10-28 22:23:45 33 4
gpt4 key购买 nike

假设以下情况:

键入A 并键入BB 可以隐式转换为A 但反之则不成立。

我有一个函数

template<class T>
void do_stuff(T a, T b);

我想这样调用所述函数:

do_stuff(A{}, B{});

这里的问题是编译器无法推断出类型,而是说:

template argument deduction/substitution failed

我可以这样调用我的函数:

do_stuff<A>(A{}, B{});

但这对用户来说更烦人。

或者我可以这样做:

template<class T, class M>
void do_stuff(T a, M b);

但是随后 b 继续其成为 B 类型的快乐方式(通过先前的调用)。

理想情况下,我想要这样的东西:

template<class T, class M = T>
void do_stuff(T a, M b);

或者:

template<class T@INSERT MAGIC SO THAT T IS DEDUCED AS BEING THE TYPE OF ARGUMENT NR 1@>
void do_stuff(T a, T b);

这样的事情可能吗?

最佳答案

b 包装在非推导上下文中。这样,只会推导出 a 并且必须将 b 转换为该类型。

template <class T> struct dont_deduce { using type = T; };
template <class T> using dont_deduce_t = typename dont_deduce<T>::type;

template<class T>
void do_stuff(T a, dont_deduce_t<T> b);

关于c++ - 具有不同类型的两个参数的隐式模板类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834415/

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