【发布时间】:2019-01-21 13:37:15
【问题描述】:
我有一个枚举类型,它描述了解析某些对象的方法。例如。我可以将“len100”解析为字符串或者枚举。嵌套结构 Native 接受一个模板参数,该参数描述将包含值的变量的类型。例如。 "len100" 可以保存为字符串或 uint。但是这段代码给了我一个错误:
"invalid use of incomplete type 'struct Evaluator<(Type)3>::Native<T>'"
在这一行:
T Evaluator<Type::jarray>::Native<T>::eval() {
向量特化也会发生这种情况。我该如何解决这个问题?是否有更好的解决方案来处理这个任务?
enum class Type
{
juint
, jstring
, jenum
, jarray
};
template<Type type>
struct Evaluator
{
template<typename T>
struct Native {
static T eval();
};
};
template<>
template<typename T>
T Evaluator<Type::jarray>::Native<T>::eval() {
cout << "primitive" << endl;
return T{};
}
template<>
template<typename T>
T Evaluator<Type::jarray>::Native<vector<T>>::eval() {
cout << "vector" << endl;
return T{};
}
int main() {
Evaluator<Type::jarray>::Native<vector<int>>::eval();
}
【问题讨论】:
-
你为什么不使用type_trais ? IE。 is_pointer -> 然后是 is_arithmetic、is_same 等。
-
您正在创建外部模板的专业化。它可以提供完整的子类型和值的新定义,省略一些添加一些东西,所以你需要新的声明。