迭代器的含义在C++ 98和C++ 11之间作为位置提示std::set::insert(iterator position, const value_type& val)和std::multiset::insert(iterator position, const value_type& val)更改传递.在编译时是否有一种简单的方法来检测哪些正在使用并使用不同的代码?
上C++ 11的一般检查并不似乎是一个好主意,(1,2),并且我没有看到合适Boost.Config宏.
具体来说,C++ 98 的文档说:
如果position指向要插入元素之前的元素,则该函数会优化其插入时间.
而对于C++ 11,它说:
如果position指向将跟随插入元素的元素(或者到最后,如果它是最后一个元素),则该函数优化其插入时间.
这很重要,因为提示会影响插入调用的复杂性.如果提示正确,则复杂性仅为摊销常数.但如果不是,它的大小就是对数.
正如下面JerryCoffin所描述的那样,C++ 98规范本质上是一个错字.
我正在寻找创建一个非类型模板类,其成员变量依赖于非类型参数(特别是固定维度的特征矩阵,但问题也存在int).为了使事情更清楚,我输入了成员类型,这很有效,直到我想要一个成员函数返回 typedef,此时我开始收到以下错误:
myClass.cpp:10:错误:'myClass'之前的构造函数,析构函数或类型转换
至少在概念上我理解这与我的typedef依赖于模板这一事实有关,因此C++很困惑.问题是我更加困惑,我尝试了一些天真的插入typename,但这并没有解决任何问题.
一个最小的工作示例.
标题:
template <int i> class myClass
{
public:
typedef int myVector_t;
myClass();
myVector_t myFunc();
};
Run Code Online (Sandbox Code Playgroud)
源代码:
#include <myClass.hpp>
template <int i>
myClass<i>::myClass()
{
//blah
}
template <int i>
myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
{
//blah
}
Run Code Online (Sandbox Code Playgroud)
我很欣赏任何见解.
如下所述,解决方案是typename在实现中包含关键字,但不包括声明.
typename myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
Run Code Online (Sandbox Code Playgroud)
推广远离Eigen的问题