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
>;
}