【发布时间】:2020-04-29 02:22:33
【问题描述】:
我想要一个类型,它依赖于其他具有 X::value_type 的 X 类。 如果其他类中没有这样的typedef,我想自己使用X。
所以我正在寻找类似的代码:
TypeChecker<X>::value_type // Here, value_type might be X or X::value_type, depending on X.
但我最初的尝试失败了,见下文:
这是一个无法编译的程序:
#include<type_traits>
template<typename T>
struct TypeChecker {
typedef typename std::conditional<
std::is_class<T>::value,
typename T::value_type, // I believe the error is due to this line (could be wrong)
T>::type value_type;
};
int main()
{
TypeChecker<int>::value_type x = 3;
return 0;
}
它给出:error: 'int' is not a class, struct, or union type
您可以在线尝试:godbolt link
我很困惑,因为我认为std::conditional 会选择正确的分支,但在某种意义上它似乎正在评估它们。至少,足以导致编译错误。
帮助?
【问题讨论】:
标签: c++ templates c++14 sfinae