gmock不支持将右值引用作为模拟函数的参数(问题报告)。
例如,以下代码将无法编译:
MOCK_METHOD1(foo,void(std::string&&));
Run Code Online (Sandbox Code Playgroud)
我找不到有关gmock何时将对此添加支持的信息。
如何将列表转换为元组列表?元组由列表的偶数和奇数索引处的元素组成.例如,我有一个列表[0, 1, 2, 3, 4, 5],需要转换为[(0, 1), (2, 3), (4, 5)].
我能想到的一种方法如下.
l = range(5)
out = []
it = iter(l)
for x in it:
out.append((x, next(it)))
print(out)
Run Code Online (Sandbox Code Playgroud) std::allocator是无国籍的。换句话说,由a1.allocate()(a1是 的一个实例std::allocator)分配的内存可以由a2.deallocate()(a2是 的另一个实例std::allocator)释放。
为什么它们不是静态成员函数?
(2014 年 10 月 17 日编辑:)
好的,感谢 luk32。由于 C++11 自定义allocator可以有状态,这可能是为什么std::allocator有那些非静态成员函数的原因。
我试图使用函数模板foo将参数转换为initializer_list.但是,initializer_list它转换后的奇怪值与输入参数不同.
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using namespace std;
template<class T>
void func(std::initializer_list<T> a_args)
{
if (a_args.begin() != a_args.end())
{
auto last = prev(a_args.end());
copy(a_args.begin(), last, ostream_iterator<int>(cout, ","));
cout << *last;
}
cout << endl;
}
template<class T, class ...Args>
struct first_of
{
typedef T type;
};
template<class ...Args>
initializer_list<typename first_of<Args...>::type> foo(Args&&... args)
{
return { forward<Args>(args)... };
}
int main()
{
func({1,2,3});
auto x = foo(1,2,3);
func(x); //this should be …Run Code Online (Sandbox Code Playgroud) 我试图编写一个模板函数,它可以接受函数作为参数并在之后调用它.该计划如下:
#include <iostream>
#include <functional>
using namespace std;
template<typename R, typename... Args>
R call(function<R(Args...)> fun, Args... args)
{
cout << "call@ " << __LINE__ <<endl;
return fun(args...);
}
int main()
{
cout << call(std::plus<int>(),1,2) <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
G ++ compplains:
g++ -c -Wall -std=c++0x -I../include a.cpp -o a.o
a.cpp: In function ‘int main()’:
a.cpp:16:38: error: no matching function for call to ‘call(std::plus<int>, int, int)’
a.cpp:16:38: note: candidate is:
a.cpp:7:3: note: template<class R, class ... Args> R call(std::function<_Res(_ArgTypes ...)>, Args …Run Code Online (Sandbox Code Playgroud)