繁体   English   中英

C ++模板类型规范

[英]C++ template type specification

我有一个与空白函数同名的空类。 当我尝试将此类作为模板参数传递时,收到错误消息:

参数1的类型/值不匹配

'Test'不是参数'_Ty'的有效模板类型参数

考虑:

#include <vector>

void Test() {
}

class Test {
};

int main() {
    std::vector<Test> test;
}

更改为

std::vector<class Test>

似乎可行,但是无论是标准要求还是编译器随机支持,我都无法发现。

有人可以指出如何解决此问题或链接到需要这种行为的标准吗?

是的,您必须使用名称前面的关键字class来消除歧义,这会导致复杂的类型说明符。

[class.name] / 2

(强调我的)

如果在范围内声明了类名,并且还声明了相同名称的变量,函数或枚举器,则当两个声明都在范围内时, 只能使用elaborated-type-specifier ([basic .lookup.elab])。 [示例:

 struct stat { // ... }; stat gstat; // use plain stat to define variable int stat(struct stat*); // redeclare stat as function void f() { struct stat* ps; // struct prefix needed to name struct stat stat(ps); // call stat() } 

—结束示例]

[dcl.type.elab]

详细类型说明符:

  • class-key attribute-specifier-seq opt嵌套名称说明符opt标识符
  • 类密钥简单模板ID
  • 类键嵌套名称说明符模板opt simple-template-id
  • 枚举嵌套名称说明符选择标识符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM