在下面的示例中,我们使用C++17的功能“类模板参数推导”来推断
现在,是否有可能部分指定模板参数,让剩余的参数自动推导?实际上就像这样:像这样:
我试过例如。
但它无法编译:
部分推导是否可能?如果直接不可能,是否有任何好的解决方法?
val
的类型为Base<int, double, bool>
。template<class T, class U, class V>
struct Base {
Base(T, U) { };
Base(T, U, V) { };
Base(V) { };
};
void func() {
Base val(1, 4., false);
}
现在,是否有可能部分指定模板参数,让剩余的参数自动推导?实际上就像这样:像这样:
Base<V = bool> val1(1, 4.); // U & V deduced --> Base<int, double, bool>
Base<T = bool, T = int> val2(5.); // V deduced --> Base<bool, int, double>
我试过例如。
template<class T, class U> using Base2 = Base<T, U, double>;
void func() {
NewBase2 val(1, 2);
}
但它无法编译:
'Base2':使用别名模板需要模板参数列表
。部分推导是否可能?如果直接不可能,是否有任何好的解决方法?
T
并且有U
和V
推导出来,或者指定T
和U
并且有V
推导出来。看到规律了吗?在 C++ 中拥有命名模板参数会很好,但不幸的是我们没有。 - Sam Varshavchik