【发布时间】:2017-11-21 20:35:34
【问题描述】:
在以下代码中,VS2015 在IsInstantiation<OtherType, T1>::value 抱怨,给出此错误“模板参数'TT' 的模板参数无效,需要类模板”。我将如何解决这个问题?我想将 OtherType 限制为 T1 枯萎 SomeType 或 OtherType 的情况。
template <template<typename...> class TT, typename T>
struct IsInstantiation : std::false_type
{
};
template <template<typename...> class TT, typename... Ts>
struct IsInstantiation<TT, TT<Ts...>> : std::true_type
{
};
template <typename T1>
class SomeType{};
template <typename T1, typename T2>
class OtherType
{
static_assert(IsInstantiation<SomeType, T1>::value ||
IsInstantiation<OtherType, T1>::value,
"Event must have SomeType or OtherType as first type");
public:
explicit OtherType(T1 t1, T2 t2)
: mT1{ std::move(t1) }
, mT2{ std::move(t2) }
{
}
private:
T1 mT1;
T2 mT2;
};
【问题讨论】:
-
哪个是“二次使用”?可以标记一下吗?
-
Barry 改进了我的答案。
标签: c++ c++11 c++14 c++17 variadic-templates