C++ 重载运算符>&燃气轮机;兰博达斯

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)&

更新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)> 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;
}