gpt4 book ai didi

c++ - 类型名和范围运算符的语法错误

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

谁能告诉我如何解决下面的语法问题?

#include <iostream>

template <int N>
struct Thing {
static const int num = N;
};

template <int N>
struct Get {
using type = Thing<N>;
};

template <int... Is>
void foo() {
// int a[] = {(std::cout << Thing<Is>::num << '\n', 0)...}; // This compiles.
int a[] = {(std::cout << typename Get<Is>::type::num << '\n', 0)...}; // This does not.
}

int main() {
foo<0,1,2>();
}

GCC 5.1.0 说 [Error] expected '(' before '<<' token。有什么快速的方法来解决这个问题(无需编写新函数并在 foo 中调用它)?

最佳答案

如评论中所述,您不需要 typename这里。但要更详细地解释一下:

你可能写了 typename Get<Is>::type::num因为你知道如果你会引用 Get<Is>::type , 你需要输入 typename在它的前面。这通常是正确的,但并非总是如此。在某些情况下,语法已经清楚地表明 type。用作类型,而不是表达式,在这种情况下你不需要 typename ,在这种情况下,您通常不能使用 typename .

当你写 Get<Is>::type::num , type已经被假定为一个类型。放typename前面表示你要num也被视为一种类型。你不知道,所以不要写 typename .

关于c++ - 类型名和范围运算符的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32316696/

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