gpt4 book ai didi

c++ - 不完整类型作为模板的标记类型

转载 作者:行者123 更新时间:2023-11-30 02:35:42 25 4
gpt4 key购买 nike

在模板实例化时通常不允许不完整的类型,但即使不明确使用不完整的类型,这是否成立? gcc 5.1 和 VS 2015 允许,但我不确定。示例:

    template<typename T>
struct B{
// not using T
};

struct tag1{};
struct tag2; // incomplete
using C1 = B<tag1>;
using C2 = B<tag2>;
using C3 = B<struct tag3>; // hmm...

int main(){
C1 c1;
C2 c2;
C3 c3;
}

奖金:tag3 怎么样?以上?

编辑: 响应建议的拷贝,std::vectorB 相比使用模板参数的类型。查看接受的答案:这是允许的,但关于 vector 的问题不是。

最佳答案

是的,您可以使用不完整的类型作为模板类型参数——前提是您从不在需要完整类型的上下文中使用该类型参数。当您想要一个模板参数来区分两个不同的类模板时,这很方便 - 但实际上不需要它用于其他任何事情。

由于 B 从不尝试对 T 做任何需要它完成的事情,所以它的所有三个实例化(C1 >C2C3) 完全有效。

关于c++ - 不完整类型作为模板的标记类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399093/

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