嵌套模板解决方案的MSVC2010
Nested templates workaround for MSVC2010?
我偶然发现了这里描述的嵌套模板的相同问题。
以下代码:
# include <cstdlib> // for std::size_t
template<std::size_t N>
class Outer
{
public :
template<typename T>
class Inner
{
public :
inline Inner<T> & operator ++ (void) ;
inline Inner<T> operator ++ (int) ;
} ;
} ;
template<std::size_t N>
template<typename T>
inline typename Outer<N>::template Inner<T> & Outer<N>::Inner<T>::operator ++ (void)
{ // ^^^^^^^^ Point Of Interest : MSVC is the only one who complains
// preincrement
}
template<std::size_t N>
template<typename T>
inline typename Outer<N>::template Inner<T> Outer<N>::Inner<T>::operator ++ (int)
{ // ^^^^^^^^ Point Of Interest
// postincrement
}
只要在返回类型中存在template
关键字,在MinGW 4.5(即gcc)中编译良好,但这使得MSVC2010抱怨声明/定义不匹配:
<>之前error C2244: 'Outer::Inner::operator ++':无法将函数定义与现有声明匹配1>定义1> 'Outer::Inner &Outer::Inner::operator ++(void)'1>现有声明1> 'Outer::Inner::Inner::operator ++(int)'1> 'Outer::Inner &Outer::Inner::operator ++(void)' <-这就是它想要的!>之前当删除template
关键字时,MSVC可以正常编译,而gcc会生气:
根据上面链接的帖子,MSVC似乎是错误的。所以我的问题是:
如何适应上述代码,以便与MSVC和GCC同时编译?我真的想避免这个可怕的预处理器hack:
# ifdef MSVC # define nested_template # else # define nested_template template # endif
然后用nested_template
来取悦不喜欢template
的MSVC。
- 如果不可能,如何重构/重新设计代码以避免嵌套模板的情况?
实际上,在许多需要嵌套模板的地方,定义是获得交叉编译器支持的方法。Boost也可以!
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 嵌套模板解决方案的MSVC2010