gpt4 book ai didi

c++ - 在模板类中将依赖类型声明为函数参数

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:30 26 4
gpt4 key购买 nike

我有一个模板类,它具有依赖类型作为函数参数的 typedef:

template <typename T > struct Foo {
typedef typename std::vector<T>::iterator Iterator;

inline void bar( const Iterator& it ) const;

std::vector<T> vec;
};

现在,Visual Studio (2015) 和 GCC (5) 对于函数 bar() 在类 Foo 之外的正确声明存在冲突观点。

我原来在Linux上是这样写的,GCC编译的很开心:

template <typename T>
inline void Foo<T>::bar( const Foo<T>::Iterator& it ) const {}

现在尝试在 Visual Studio 2015 上编译,我收到以下错误消息

1>main.cpp(14): error C2065: 'it': undeclared identifier
1>main.cpp(14): warning C4346: 'Foo<T>::Iterator': dependent name is not a type
1> main.cpp(14): note: prefix with 'typename' to indicate a type

看来 VS 要求 typename 关键字出现在 Iterator 前面。美好的。我添加了它,但现在它拒绝在 GCC 中编译。

main.cpp:14:35: error: variable or field 'bar' declared void
inline void Foo<T>::bar( typename const Foo<T>::Iterator& it ) const {}

你可以在这里看到它http://ideone.com/EaUeus

所以我的问题是……谁是对的?有没有一种方法可以让这段代码在两个平台上编译而无需求助于 #ifdef

最佳答案

你应该使用 const typename , 不是 typename const .编译器不知道 Foo<T>::Iterator是一种类型,const只能用于类型。所以先说它是一个类型,然后把它弄成const .

关于c++ - 在模板类中将依赖类型声明为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639757/

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