gpt4 book ai didi

c++ - 模板特化,其中参数是用于元编程的非类型参数化模板

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:57 24 4
gpt4 key购买 nike

我有以下代码:

template<int lengthAfter>
class VariableString{
public:
enum{
fieldSize = -1000
};

....

};

template<typename T, int FieldSize = sizeof(T)>
class field_trait{
public:
enum{
fieldSize = FieldSize
};

....
};

template<int lengthAfter>
class field_trait<VariableString<lengthAfter>, -1000>{
public:
enum{
fieldSize = -1000
};
....
};

static_assert(field_trait<VariableString<0> >::fieldSize == -1000, "VariableString length error");

当我编译时,static_assert 在我期望特化工作的地方失败了。我哪里错了?

最佳答案

您的特化仅适用于 -1000 的第二个参数,但它是 sizeof(first argument) 正如主模板中的默认值所示。也就是说,您的调用实际上等同于

field_trait, sizeof (VariableString<0>)>

这样做

template<int lengthAfter, int size>
class field_trait<VariableString<lengthAfter>, size>

关于c++ - 模板特化,其中参数是用于元编程的非类型参数化模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828353/

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