我想深入了解模板代码,但是我在这里用简化代码重现了一个错误:
namespace impl {
template<class T>
struct DefaultPolicy {
static T unwrap(T value) { return value; };
};
}
struct DefaultPolicy {
template <class T> using type = typename impl::DefaultPolicy<T>;
};
template <class T, class Policy>
auto unwrap(T value, Policy) {
using policy_t = typename Policy::type<T>;
return policy_t::unwrap(value);
};
int main() {
unwrap(42, DefaultPolicy{});
}
我不知道如何纠正看起来像基本语法错误:
error: expected ';' before '<' token
using policy_t = typename Policy::type<T>;
^
但是,如果我用'DefaultPolicy'替换'Policy'类型(编译器应该做什么......或多或少?),我没有错误。
那么,是否有一个简单的语法解决方案,或者我是否尝试做一些不可能的事情?