C++ 重载运算符>&燃气轮机;兰博达斯
更新3: 请到 我想在c++11/14中为lambdas重载C++ 重载运算符>&燃气轮机;兰博达斯,c++,c++11,lambda,operator-overloading,C++,C++11,Lambda,Operator Overloading,更新3: 请到 我想在c++11/14中为lambdas重载操作符>> 下面是一个简单的代码: #include<iostream> #include<functional> #include<vector> using namespace std; template <typename R,typename T> void operator >> (vector<T>& v, function<R(T)&
操作符>>
下面是一个简单的代码:
#include<iostream>
#include<functional>
#include<vector>
using namespace std;
template <typename R,typename T>
void operator >> (vector<T>& v, function<R(T)> f){
for(auto& e : v)
f(e);
}
int main(){
vector<int> v = { 1,2,3,4,5,6,7};
auto l = [](int i) { cout << i*i << endl; };
v >> function<void(int)>(l);
}
但是对于我的简单示例,我仍然无法找到如何重载>
操作符
更新:
实际上,我希望能够为不同的应用程序重载“>>”操作符
具有不同数量参数的lambda
v >> [](int i) { } // calls the overload with one lambda argument
v >> [](int i1,int i2) { } // calls another overload with two lambda arguments
更新2:
我想我没有解释我真正想要什么,我问了一个新问题
我已经在那个问题中详细地解释了这个问题。也许下面的代码可以完成这项工作:
#include<iostream>
#include<functional>
#include<vector>
using namespace std;
template <typename R, typename T>
void operator >> (vector<T>& v, R f){
for(auto& e : v)
f(e);
}
int main(){
vector<int> v = { 1,2,3,4,5,6,7};
auto l = [](int i) { cout << i*i << endl; };
v >> function<void(int)>(l);
v >> l; //(I)
v >> [](int i) { cout << i*i << endl; }; //(II)
}
HTH在这个简单的示例中,您的解决方案有效(谢谢)。但是,如果我想用不同数量的参数为不同的Lambda重载>>运算符,那么它就不会了。@amin您如何想象在模板二进制
运算符>>
中为Lambda表达式传递额外的任意数量的输入参数?vector
只是一个简单的例子。我不想带来与问题无关的实际代码(它是sqlite C库的包装器,我有一个查询类,我想重载>>操作符以从查询中提取不同数量的列)我想我没有解释我真正想要的是什么,我问了一个新问题,请看一看
v >> [](int i) { } // calls the overload with one lambda argument
v >> [](int i1,int i2) { } // calls another overload with two lambda arguments
#include<iostream>
#include<functional>
#include<vector>
using namespace std;
template <typename R, typename T>
void operator >> (vector<T>& v, R f){
for(auto& e : v)
f(e);
}
int main(){
vector<int> v = { 1,2,3,4,5,6,7};
auto l = [](int i) { cout << i*i << endl; };
v >> function<void(int)>(l);
v >> l; //(I)
v >> [](int i) { cout << i*i << endl; }; //(II)
}
#include<iostream>
#include<functional>
#include<vector>
using namespace std;
template <typename T, typename F>
void operator >> (vector<T>& v, F f){
for (auto& e : v) f(e);
}
int main(){
using namespace std::placeholders;
vector<int> v = { 1, 2, 3, 4, 5, 6, 7 };
v >> std::bind([](int i, int j){ cout << i*j << " "; }, _1, 2);
cout << endl;
v >> std::bind(
[](int i, double d1, double d2)
{
cout << (static_cast<double>(i) * d1 / d2) << " ";
},
_1, 2.0, 3.0);
cout << endl;
return 0;
}