gpt4 book ai didi

templates - 属性可以应用于模板吗?

转载 作者:行者123 更新时间:2023-12-05 03:11:11 28 4
gpt4 key购买 nike

C++ 标准是否允许在模板声明上设置属性?例如:

[[attr1]] template <typename T [[attr2]] > [[attr3]]
class [[attr4]] C {};

我相信attr4将被视为模板实例的有效属性(例如,它将是 T<int>T<char> 上的属性)。

然而 attr1attr3被编译器认为是有效的(即使它会被忽略)?

attr2也有效?我想不是,但我不确定。问题在于它是否将属性“添加”到实例化中使用的给定类型,但 IIRC 当前模板参数忽略了所有属性。

我对 attr1 感兴趣和/或 attr3用于自定义测试 DSL,其中模板上的给定属性将自动强制使用给定类型集实例化类。

最佳答案

我深入研究了 C++ 语法,这里是相关部分:

declaration:
block-declaration
template-declaration

template-declaration:
template < template-parameter-list > declaration

这禁止 [[attr1]][[attr3]],如果你相信我,那个 declaration 不能以 属性说明符序列


template-parameter-list:
template-parameter

template-parameter:
type-parameter

type-parameter:
type-parameter-key ..._opt identifier_opt

type-parameter-key:
class
typename

禁止 [[attr2]],正则表达式中的 identifier[a-zA-Z_][a-zA-Z_0-9]*,带有 universal-character-name其他实现定义的字符


declaration:
block-declaration

simple-declaration:
decl-specifier-seq_opt init-declarator-list_opt ;

decl-specifier-seq:
decl-specifier attribute-specifier-seq_opt

decl-specifier:
type-specifier

type-specifier:
class-specifier

class-specifier:
class-head { member-specification_opt }

class-head:
class-key attribute-specifier-seq_opt class-head-name class-virt-specifier_opt base-clause_opt

这允许 [[attr4]]

关于templates - 属性可以应用于模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769253/

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