【发布时间】:2021-05-08 03:23:18
【问题描述】:
假设我们有一个给定的类ABC,它使用K 和V 进行模板化:
template <typename K, typename V>
using ABC = AnotherClass<K, V>
我知道可以实现类型特征来检查模板 T 是否属于给定类 ABC,例如:
template <typename T>
struct is_class_abc : std::false_type {};
template <typename K, typename V>
struct is_class_abc<ABC<K, V>> : std::true_type {};
假设我们将ABC 定义更改为AnotherClass,其类型会根据K 和V 而变化:
template <typename K, typename V>
using ABC = AnotherClass<typename std::conditional<
CONDITION, SOMETHING, SOMETHIN_ELSE>::type, ... >
条件、something 和 something_else 都依赖并依赖于 K-V。
我得到这个编译错误:
类模板偏特化包含不能推导的模板参数;这个部分特化永远不会被使用
不可演绎的模板参数'K'
V 也一样。
知道是否可以这样做吗?如果是这样,我该如何让它发挥作用?
【问题讨论】:
-
我们可以得到minimal reproducible example吗?
-
"class ABC" - 不是一个类。甚至没有类模板。别名的行为有些不同。
-
CONDITION、SOMETHING和SOMETHIN_ELSE是否曾经使用过K和V? -
@RemyLebeau 是的。它有什么改变吗?
-
我们能看到产生此错误消息的真实代码示例吗?诊断我们看不到的代码非常困难。
标签: c++ templates metaprogramming template-specialization typetraits