gpt4 book ai didi

c++ - static_assert 引用封闭模板类

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:34 26 4
gpt4 key购买 nike

在下面的代码中,VS2015 在 IsInstantiation<OtherType, T1>::value 报错,给出此错误“模板参数'TT'的模板参数无效,需要一个类模板”。我将如何解决这个问题?我想限制 OtherType对于 T1 枯萎的情况 SomeTypeOtherType .

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;
};

最佳答案

尝试

template <typename, typename>
class OtherType;

template <typename T1, typename T2>
using OtherTypeAlias = OtherType<T1, T2>;

template <typename T1, typename T2>
class OtherType
{
static_assert(IsInstantiation<SomeType, T1>::value ||
IsInstantiation<OtherTypeAlias, T1>::value,
"Event must have SomeType or OtherType as first type");

问题:里面OtherType , 当你写 OtherType , 默认为 OtherType<T1, T2> ;所以当你通过 OtherType作为 IsIstantiation 的参数,您传递的是模板类型,而不是模板模板。

-- 编辑 --

我不知道但是可以直接引用OtherType里面的干货(没有模板默认参数) (感谢巴里!)。

这样就简单多了

O不知道如何直接引用类OtherType -- 作为模板模板,没有默认模板参数 -- 在 OtherType 的主体内

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");

没有别名

关于c++ - static_assert 引用封闭模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com