C++ 模板化C++;将第一个参数设置为第二个参数作为默认参数的函数

C++ 模板化C++;将第一个参数设置为第二个参数作为默认参数的函数,c++,templates,c++14,C++,Templates,C++14,我有这样一个函数: template <typename A, typename B> void foo(const B & b) { ... } 然而,我还没有找到一种方法来做到这一点。有人能想出一个吗?#包括 #include <type_traits> struct deduce_tag; template <typename PreA = deduce_tag, typename B> void foo(const B &

我有这样一个函数:

template <typename A, typename B>
void foo(const B & b)
{
    ...
}
然而,我还没有找到一种方法来做到这一点。有人能想出一个吗?

#包括
#include <type_traits>

struct deduce_tag;

template <typename PreA = deduce_tag, typename B>
void foo(const B & b) {
    using A = std::conditional_t<
        std::is_same<PreA, deduce_tag>::value,
        B,
        PreA
    >;
}
结构演绎标签; 模板 富奥酒店(康斯特食宿酒店){ 使用A=std::conditional\u t< std::值是否相同, B 前体 >; }
<代码>这是C++版本?那是C++ 14。为什么需要两个模板参数?这个例子看起来只需要停止foo(i)的
B
@AlexanderDyagilev无法工作。@IgorG,因为您随后明确指定的是
B
,而不是
A
<代码>foo(i)导致
A
=
B
=
float
而不是
B
=
int
A
=
float
。很好!我总是忘记,默认模板参数不需要像默认函数参数一样尾随。
#include <type_traits>

struct deduce_tag;

template <typename PreA = deduce_tag, typename B>
void foo(const B & b) {
    using A = std::conditional_t<
        std::is_same<PreA, deduce_tag>::value,
        B,
        PreA
    >;
}