【发布时间】:2017-09-29 13:27:40
【问题描述】:
我想做类似以下的事情(在 c++11、c++14 中;不是 c++17):
template <class T>
using partner = void;
template<>
using partner<A> = X;
template<>
using partner<B> = Y;
template<>
using partner<C> = Z;
但是我得到一个编译错误---
错误:“使用”之前的预期不合格 ID
---关于第一个模板特化。
这样的事情可能吗? (我已经知道我可以使用带有using 语句的模板类。我希望直接使用没有类包装器的using 语句,因为它更简单、更优雅。如果有另一个简单、优雅的解决方案,请分享!)
【问题讨论】:
-
std::conditional_t(withstd::is_same) 是另一种选择,但我不会说它更优雅。 -
你不能做这样的事情的一个原因是别名模板是从上下文中推断出来的,例如如果在另一个模板参数中使用
标签: c++ c++11 c++14 using template-specialization